Javascript正则表达式防止标签内部匹配

Javascript regular expression prevent matching inside tags

本文关键字:内部 标签 正则表达式 Javascript      更新时间:2023-09-26

我必须匹配一个不在标签内的字符串。我正在工作的项目,我没有控制后端html渲染代码。我需要做的是为多个动态单词添加悬停功能。我创建了一个脚本,将在特定元素中查找这些关键词,并在悬停的标题标签中添加它们的描述。我的问题是,如果在其他关键字的标题标签中发现其他关键字。

我的JS:

var str = 'match <span title="not match here">match</span> match';
str.replace( /match/gim, 'ok' );

我不希望标题属性中的"match"字被替换,我想要的结果是:

'ok <span title="not match here">ok</span> ok'

我如何用Javascript做到这一点?

我试过下面的表达式,但它不适合我:

^((?!(".+")match)*$

您需要首先捕获标签,以便能够避免它们:

var result = str.replace(/(<[^>]*>)|match/gi, function (_,g1) {
    return (g1==undefined)? 'ok':g1;
});

但是如果可以的话,使用DOM可能是最好的方法。