Javascript 如何使用ES6/7对html元素中的所有文本运行大量正则表达式替换?

Javascript 如何使用ES6/7对html元素中的所有文本运行大量正则表达式替换?,javascript,regex,ecmascript-6,ecmascript-2016,Javascript,Regex,Ecmascript 6,Ecmascript 2016,我希望编写一个客户端脚本,使用最新的JavaScript ES6/ES7方法对页面的文本节点运行多个正则表达式。我怎么做?你可以这样做 const elements=document.getElementsByTagName('*'); const replaceDict={'New Text':/Old Text/gi,'what':/this/gi}; 用于(元素的常数e1){ if(e1.parentNode.nodeName!=“BODY”){ 继续; } 排列 .from(e1.ch

我希望编写一个客户端脚本,使用最新的JavaScript ES6/ES7方法对页面的文本节点运行多个正则表达式。我怎么做?

你可以这样做

const elements=document.getElementsByTagName('*');
const replaceDict={'New Text':/Old Text/gi,'what':/this/gi};
用于(元素的常数e1){
if(e1.parentNode.nodeName!=“BODY”){
继续;
}
排列
.from(e1.childNodes)
.filter(e=>e.nodeType===Node.TEXT\u节点)
.forEach(e2=>{
让replaceText=e2.nodeValue;
for(让[k,v]的Object.entries(replaceDict)){
replaceText=replaceText.replace(v,k);
}
if(replaceText!=e2.nodeValue){
log(`replacement${e2.nodeValue}为${replaceText}`);
e2.nodeValue=replaceText;
}
} )
;
}

这是一个旧的文本测试

这是一个旧文本测试旧文本

@gyre我在Facebook上回答一个朋友问的问题,如果你一定要知道的话。他写了这个
var elements=document.getElementsByTagName('*');for(var i=0;i
只是想告诉他如何改进它,做他想做的事,并让贡献对他人有用。我有很多徽章。谢谢你的问题=)啊;有趣的政策在自我回答上也是如此。一个冷静的回答!是的,我想你一定有某种逻辑上的动机,因为你已经做得很好了。两点:1)我能推荐
nodeType===Node.TEXT\u Node
<代码>3
不是很直观。2)
getElementsByTagName(“*”
可以返回任何内容:
包含的标记。您可能希望根据用例过滤这些内容