Javascript正则表达式,用于去除选择性html标记

Javascript regex to strip selective html tags

本文关键字:选择性 html 标记 正则表达式 用于 Javascript      更新时间:2024-04-09

我正在尝试使用regex从字符串中剥离所有(除了某些)html标记。我目前正在尝试的内容如下:

var a = "<pre><code><p>This is a <span>test</span></p></code></pre>";
var b = a.replace(/('<|'<'/)[^'>,p,li,br,b]*'>/ig,"");

但是b的值作为"<pre><p>This is a <span>test</span></p></pre>" 返回

似乎任何包含[>,p,li,br,b]的单个实例的标签都没有被删除,因为这里所有的prespanp都包含字符p。但是,我只想忽略[^'>,p,li,br,b]中的确切字符。

我期望的输出是"<p>This is a test</p>"

我做错了什么?

var a = "<pre><code><p>This is a <span>test</span></p></code></pre>";
var b = a.replace(/'<(?!'/?(p|li|br|b)[ >])[^>]*'>/ig,"");

只有当正则表达式后面没有要保留plibrb的标记名之一(后面跟着空格或关闭>,这样它就不会认为<pre><p>)时,该正则表达式才会匹配前导<</

然后,它将所有内容匹配到结束的>

看看这个答案。

也就是说,方括号[]只匹配单个字符,而不是单词——有关您正在做什么的更多信息,请参阅此答案的底部。相反,您需要使用括号(?:p|li|br|b)来匹配单词——?:用于避免捕获。此外,括号将出现在方括号之外。

由于你使用的是阴性匹配,你可能希望查看一下周围的情况;特别是关于积极和消极的观察。


[^'>,p,li,br,b]翻译为不是>不是,不是p不是,不是l不是i不是,不是b不是r不是,不是b