gpt4 book ai didi

Javascript Regex,删除未关闭的标签

转载 作者:行者123 更新时间:2023-11-29 22:03:30 32 4
gpt4 key购买 nike

我正在寻找 javascript 正则表达式解决方案来删除未闭合的标签,例如:

<div></div><span>

如你所见,我想删除 <span>元素,我知道在标记上使用正则表达式是个坏主意,但它是我的项目所必需的,这是我制作的正则表达式模式,但它不起作用:

/<([a-z]+?)>([\s\S]*?)(?!<\/\1>)/g

我正在使用 javascript replace 将所有匹配项替换为 "" ,我尝试用我的模式匹配未闭合的标签,关于模式:

  1. [a-z]我知道 html 标签可以包含 =,",etc ,我正在寻找可以播放和编辑的简单模式,所以我从 [a-z] 开始
  2. 我用了!?拒绝结束标签的匹配。

我知道我的模式不起作用,如果有人有想法我将非常感激。

编辑:

我知道可能存在递归,如果是这种情况我想删除所有递归树,我只想保留 1 级 html 例如:

<div><span></span></div><p></p>

因此,如果 <div> 之后的下一个标记不是 </div>删除它。

最佳答案

首先,让我们看看OP是怎么说的:

  • 我知道在标记中使用正则表达式是个坏主意,但我的项目需要它。
  • 我只想保留 1 级 html

这是可以实现的。

您走在正确的轨道上。但是,您不应该使用 !? 来拒绝结束标记的匹配。你想接受他们。这样匹配就不会接受未闭合的标签,这毕竟是我们的目标。

现在,您的正则表达式将如下所示。

/<([a-z]+?)>([\s\S]*?)(<\/\1>)/g

我们可以删除第二个和第三个括号,因为它们不是必需的:

/<([a-z]+?)>[\s\S]*?<\/\1>/g

如果我们在提供的代码上测试这个正则表达式,将得到以下结果:

"<div><span></span></div><p></p>".match(/<([a-z]+?)>[\s\S]*?<\/\1>/g)
["<div><span></span></div>", "<p></p>"]

我们的正则表达式似乎匹配了太多的符号。我们必须在“<”符号处中断匹配,因为它表示新标签。 [^<] 表示“除“<”之外的任何字符。

"<div><span></span></div><p></p>".match(/<([a-z]+?)>[^<]*?<\/\1>/g)
["<span></span>", "<p></p>"]

最后我们可以将匹配的结果加入。

"<div><span></span></div><p></p>".match(/<([a-z]+?)>[^<]*?<\/\1>/g).join("")
"<span></span><p></p>"

呜呜呜。我将把正则表达式的第一部分留给你,因为它不是问题的一部分。我希望这可以帮到你。我愿意接受进一步的提问。

关于Javascript Regex,删除未关闭的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269763/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com