所以我有一个无序列表,如下所示:
<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)/
匹配列表项的末尾,但是我之前可以做些什么来匹配而不捕获其他项?
答案 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)