正则表达式替换字符串但不在html标记内

5 html javascript regex

我想使用JavaScript替换HTML页面中的字符串但忽略它,如果它在HTML标记中,例如:

<a href="google.com">visit google search engine</a>
you can search on google tatatata...
Run Code Online (Sandbox Code Playgroud)

我想,以取代google<b>google</b>,但不是在这里:

<a href="google.com">visit google search engine</a>
you can search on <b>google</b> tatatata...
Run Code Online (Sandbox Code Playgroud)

我试过这个:

regex = new RegExp(">([^<]*)?(google)([^>]*)?<", 'i');
el.innerHTML =  el.innerHTML.replace(regex,'>$1<b>$2</b>$3<');
Run Code Online (Sandbox Code Playgroud)

但问题是:我<b>google</b>进入了<a>标签:

<a href="google.com">visit <b>google</b> search engine</a>
you can search on <b>google</b> tatatata...
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?

Dra*_*mon 6

你最好使用html解析器,而不是正则表达式.我不确定它是否可以100%可靠地完成.


jhu*_*man 5

您可能会或可能不会使用正则表达式.这取决于您可以精确定义条件.说你想要更换字符串,除非它在HTML标签中不够窄,因为页面上的所有内容都可能在某些HTML标记内(如果没有别的话,则为BODY).

为此可能更好地遍历DOM树,而不是尝试在HTML上使用正则表达式.