2

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

谢谢

4

1 回答 1

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>

在这里检查

于 2013-06-27T00:23:21.240 回答