如何在JavaScript中按规则正则替换字符串(排除<span>标签)
没问题,我们可以利用正则表达式的负向断言来实现这个需求——只替换那些不属于<span>和</span>标签的<和>。
具体思路很明确:
- 对于
<:只替换那些后面不是span>的实例(也就是排除<span>开头的标签) - 对于
>:只替换那些前面不是</span的实例(也就是排除</span>结尾的标签)
直接上可运行的代码示例:
let str = "<span> list: <mat> </span> && <span> see: how much <mat> </span> && <span> with: <mat> = '<pok>'</span>"; // 替换非<span>开头的< str = str.replace(/<(?!span>)/g, "&lt;"); // 替换非</span>结尾的> str = str.replace(/(?<!<\/span)>/g, "&gt;"); console.log(str);
运行后输出的结果会是:
<span> list: &lt;mat&gt; </span> && <span> see: how much &lt;mat&gt; </span> && <span> with: &lt;mat&gt; = '&lt;pok&gt;'</span>
简单解释下正则逻辑:
<(?!span>):(?!...)是负向先行断言,意思是匹配到<之后,后面不能紧跟着span>(?<!<\/span)>:(?<!...)是负向后行断言,意思是匹配到>之前,前面不能是<\/span
这样就精准避开了<span>和</span>标签里的转义字符,只处理其他需要替换的部分。
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

