gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:06:16 24 4
gpt4 key购买 nike

我正在寻找一个客户端脚本,该脚本将使用最新的 JavaScript ES6/ES7 方法针对页面的文本节点运行多个正则表达式。我该怎么做?

最佳答案

你可以这样做.. jsfiddle

const elements = document.getElementsByTagName('*');
const replaceDict = { 'New Text': /Old Text/gi, 'what': /this/gi };

for ( const e1 of elements ) {
if (e1.parentNode.nodeName != 'BODY') {
continue;
}
Array
.from(e1.childNodes)
.filter( e => e.nodeType === Node.TEXT_NODE )
.forEach( e2 => {
let replaceText = e2.nodeValue;
for ( let [k,v] of Object.entries(replaceDict) ) {
replaceText = replaceText.replace( v, k );
}
if ( replaceText != e2.nodeValue ) {
console.log(`Replacing ${e2.nodeValue} with ${replaceText}`);
e2.nodeValue = replaceText;
}
} )
;
}
  <p>
this is a Old Text test
</p>
<p>
this is a Old Text test Old Text
</p>

如果愿意,您也可以只使用 Array.from() 语法,

const elements = document.getElementsByTagName('*');
const replaceDict = { 'New Text': /Old Text/gi, 'what': /this/gi };

Array.from(elements)
.filter( e => e.parentNode.nodeName === 'BODY' )
.forEach( e => {

Array.from(e.childNodes)
.filter( e => e.nodeType === Node.TEXT_NODE )
.forEach( e2 => {
let replaceText = e2.nodeValue;
for ( let [k,v] of Object.entries(replaceDict) ) {
replaceText = replaceText.replace( v, k );
}
if ( replaceText != e2.nodeValue ) {
console.log(`Replacing ${e2.nodeValue} with ${replaceText}`);
e2.nodeValue = replaceText;
}
} );

} );

这里我们有一个编译正则表达式的 replaceDict。我们使用 ES6 迭代器遍历元素,然后将 dom 的子节点转换为数组并使用 .filter.forEach 进行替换。无论我们在节点上发布了多少种不同的替换模式,我们都只更新文本节点一次。我们 console.log 用于调试目的。

关于javascript - 如何使用 ES6/7 对 html 元素中的所有文本运行大量正则表达式替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42573543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com