我有一个生成的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;
由于
答案 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