【发布时间】:2014-04-11 18:16:39
【问题描述】:
我正在寻找 javascript 正则表达式解决方案来删除未封闭的标签,例如:
<div></div><span>
如您所见,我想删除 <span> 元素,我知道在标记上使用正则表达式是个坏主意,但它是我的项目所必需的,这是我制作的正则表达式模式,但它不起作用:
/<([a-z]+?)>([\s\S]*?)(?!<\/\1>)/g
我正在使用 javascript replace 将所有匹配项替换为 "",我尝试使用我的模式来匹配 only 未封闭的标签,关于模式:
-
[a-z]我知道 html 标签可以包含=,",etc,我正在寻找可以播放和编辑的简单模式,所以我从[a-z]开始 - 我使用
!?拒绝匹配结束标签。
我知道我的模式不起作用,如果有人有想法,我将非常感激。
编辑:
我知道可能存在递归,如果是这种情况我想删除所有递归树,我只想保留 1 级 html 例如:
<div><span></span></div><p></p>
所以如果<div> 之后的下一个标签不是</div> 则删除它。
【问题讨论】:
-
说真的,在 Javascript 中使用完整的正则表达式解决方案是不可能的,因为 Javascript 正则表达式没有递归功能(处理嵌套标签的唯一方法,除了 .净)
-
所以,只要确保我理解,
<div><span></span></div><p></p>,这是完全有效的 html,你想要<div></div><p></p>吗? -
是的,我要保留1级html
-
我使用这个 html 解析器脚本来清理用户输入的所见即所得标记。它非常适合我的目的,但只处理 HTML4 标签。 John 脚本中的正则表达式可能有助于其他希望进行 Javascript DOM 解析的人。 ejohn.org/apps/htmlparser
标签: javascript regex