选择不包含子标记的

时间:2018-05-30 20:54:05

标签: html regex

我正在编写一些代码来从我的数据库中删除具有特定类的span标记。每当我删除开始标记时,我也需要删除结束标记。例如,我想转此:

<span class="someClass">Hello</span><span></span>
<span class="someClass">My <span>name</span> is Joe</span>

分为:

Hello<span></span>
My <span>name</span> is Joe

我正在尝试使用正则表达式执行此操作,但我得出的结论是,这是不可能的。所以我的第二个猜测是只选择开始和结束标签内的内容不是span标签的情况。

/<span class="someClass">(.*?)<\/span>/g适用于第一种情况,但会导致第二种情况出现问题。但是,如果我尝试/<span class="someClass">(.*)<\/span>/g会导致第一个问题。

有没有办法制作只能获得第一种情况的正则表达式?我希望它只有在有子跨度标签时才会忽略,这意味着像这样的

<span class="someClass">Hello <a href="#">world</a></span>

也将被选中。

1 个答案:

答案 0 :(得分:1)

要使此解决方案有效,您需要将整个字符串视为一行,可能需要使用s(单行)选项。

/<span((?!>).)*>((?!<span).)*?<\/span>/s