正则表达式前瞻和落后?

时间:2015-08-28 14:10:26

标签: regex

所以我有一个无序列表,如下所示:

<ul class='radio' id='input_16_5'>
<li>
    <input name='input_5' type='radio' value='location_1'  id='choice_16_5_0' />
    <label for='choice_16_5_0' id='label_16_5_0'>Location 1</label></li>
<li>
    <input name='input_5' type='radio' value='location_2'  id='choice_16_5_1' />
    <label for='choice_16_5_1' id='label_16_5_1'>Location 2</label></li>
<li>
    <input name='input_5' type='radio' value='location_3'  id='choice_16_5_2' />
    <label for='choice_16_5_2' id='label_16_5_2'>Location 3</label></li>
</ul>

我想将一个值(即location_2)传递给正则表达式,然后该正则表达式将捕获它所属的整个列表项以便将其删除。因此,如果我将其location_2传递,它将与其所在的列表项的(包括)<li></li>匹配。

我可以使用/location_3.+?(?=<li|<\/ul)/匹配列表项的末尾,但是我之前可以做些什么来匹配而不捕获其他项?

1 个答案:

答案 0 :(得分:1)

这应该得到你想要的东西

<li>(?:(?!<li>)[\S\s])+location_1[\S\s]+?<\/li>

<强> Exaplanation

<li>:打开li代码,

(?:(?!<li>)[\S\s])+:匹配包含换行符在内的任何字符,并使用否定向前看,以确保您的突出显示不会消耗两个或更多<li>个标记,

location_1:您用来突出显示整个<li>标记的关键字

[\S\s]+?:任何字符,包括换行符。 (在这里,感谢@Tensibai的评论,使这个正则表达式更简单,非贪婪)

<\/li>关闭li代码。

DEMO:https://regex101.com/r/cU4eC6/5

其他信息:

/<li>(?:(?!<li>).)+location_2.+?<\/li>/s

此正则表达式也适用于使用修饰符s来处理换行符而不是[\S\s]。 (再次感谢@Tensibai)