正则表达式找到重叠的,随机命名的标签 - 非贪婪的反向引用

时间:2013-06-26 23:51:13

标签: javascript regex

我有一个生成的HTML字符串,可能包含重叠标记,并试图找到它们以使HTML有效。字符串采用格式(例如:重叠标签,然后是嵌套标签):

<tag_1> xx <tag_2> xx </tag_1> xx </tag_2> xx <tag_1> xx <tag_3> xx </tag_3> </tag_1>

我只想提取<tag_1> xx <tag_2> xx </tag_1>

而不是

<tag_1> xx <tag_3> xx </tag_3> </tag_1>

-

目前,我的正则表达式匹配两种情况。

我假设我需要一个非贪婪地匹配反向引用(\ 1)到标记名称的正则表达式...这里是我拥有的,我无法弄清楚最后一部分。这可能在javascript中吗?

/<tag_([A-Z0-9]*)\b[^>]*>.*?<tag.*?<\/tag_\1>/gi;

由于

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

/<tag_([A-Z0-9]*)\b[^>]*>.*?<tag_([A-Z0-9]*)\b[^>]*>[^\/]*?(?!(\/tag_\2))\/tag_\1>/gi

为你的刺痛

<tag_1> xx <tag_2> xx </tag_1> xx </tag_2> xx <tag_1> xx <tag_3> xx </tag_3> </tag_1>

它将匹配

<tag_1> xx <tag_2> xx </tag_1> 

但不是

<tag_1> xx <tag_3> xx </tag_3> </tag_1>

检查here