Regex 正则表达式:更改html页面中的所有文本内容,但不更改属性中的文本

Regex 正则表达式:更改html页面中的所有文本内容,但不更改属性中的文本,regex,Regex,我谨此陈辞: <a class="logo-home" href="#" title="abc xyz">abc xyz</a> <img src="#" title="abc xyz" alt="abc xyz"/> <h1>abc xyz</h1> <p>blabla... abc xyz ... blabla</p> abc xyz 布拉布拉。。。abc xyz。。。布拉布拉 我想将字符串“abc x

我谨此陈辞:

<a class="logo-home" href="#" title="abc xyz">abc xyz</a>
<img src="#" title="abc xyz" alt="abc xyz"/>
<h1>abc xyz</h1>
<p>blabla... abc xyz ... blabla</p>

abc xyz
布拉布拉。。。abc xyz。。。布拉布拉

我想将字符串“abc xyz”更改为
abc xyz
为此,我使用以下代码:

document.body.innerHTML = document.body.innerHTML.replace(/abc xyz/g, "<span style="white-space:nowrap;">abc xyz</span>");
document.body.innerHTML=document.body.innerHTML.replace(/abc xyz/g,“abc xyz”);

但我不希望它更改元素的title属性或atl属性中的文本。我只想更改元素中的文本内容。我尝试了一些正则表达式,但问题仍然存在。有人对我有什么建议吗?非常感谢。

看起来您正在使用JavaScript中的正则表达式替换html。请不要使用正则表达式来解析HTML。改用
DOMParser()

但如果您的字符串很短,并且HTML的结构与问题中提到的类似,请尝试以下方法:

var str=`
abc xyz
布拉布拉。。。abc xyz。。。布拉布拉;

str=str.replace(/(?如果regex的用法在这里不是强制性的,我建议使用另一种方法(例如树探索)

无论如何,要使用regexp(特别是使用PCRE的JS风格)回答您的问题: 您需要确保“abc xyz”字符串后面跟一个“”,对吗?因此,请尝试

abc xyz(?=[^]*
'<a class="logo-home" href="#" title="abc xyz">abc xyz</a>\
<img src="#" title="abc xyz" alt="abc xyz"/>\
<h1>abc xyz</h1>\
<p>blabla... abc xyz ... abc xyz ... blabla</p>'
.replace(/abc xyz(?=[^<>]*<)/g, 'hello world')