JavaScript 中的 replaceAll for 循环太慢,正在寻找替代方法
replaceAll in JavaScript for loop is too slow, looking for an alternative approach
我正在制作一个浏览器扩展程序,用 ***
替换网站上的所有脏话。
现在,我有一个巨大的 JS 数组,其中包含所有亵渎词(2k+ 词)。
我正在使用 for 循环遍历 profaneWords
数组中的每个单词,并将匹配单词的任何实例替换为 ***
:
for (let i = 0; i < profaneWords.length; i++) {
let element = profaneWords[i];
document.body.innerHTML = document.body.innerHTML.replaceAll(
element,
"***"
);
}
有了这个,我的浏览器用 ***
搜索并替换网站上所有亵渎词语的所有实例大约需要 5 分钟。但是,在完成单词映射之前,不会对网站进行任何更改。所以这5分钟,好像什么都没发生。
我用另一个小得多的数组(10 个单词)测试了这个方法,替换几乎是即时的。
有没有更好的方法可以为包含超过 2000 个元素的数组实现此功能?
您考虑过使用 RegExp 吗?
const str = 'Waiting on ass, asset , and tit titillation, ass.';
const profaneWords = ['ass', 'tit'];
const regex = new RegExp('\b'+profaneWords.join('\b|\b')+'\b', 'g');
var newstr = str.replace(regex, '***');
console.log(newstr);
我正在制作一个浏览器扩展程序,用 ***
替换网站上的所有脏话。
现在,我有一个巨大的 JS 数组,其中包含所有亵渎词(2k+ 词)。
我正在使用 for 循环遍历 profaneWords
数组中的每个单词,并将匹配单词的任何实例替换为 ***
:
for (let i = 0; i < profaneWords.length; i++) {
let element = profaneWords[i];
document.body.innerHTML = document.body.innerHTML.replaceAll(
element,
"***"
);
}
有了这个,我的浏览器用 ***
搜索并替换网站上所有亵渎词语的所有实例大约需要 5 分钟。但是,在完成单词映射之前,不会对网站进行任何更改。所以这5分钟,好像什么都没发生。
我用另一个小得多的数组(10 个单词)测试了这个方法,替换几乎是即时的。
有没有更好的方法可以为包含超过 2000 个元素的数组实现此功能?
您考虑过使用 RegExp 吗?
const str = 'Waiting on ass, asset , and tit titillation, ass.';
const profaneWords = ['ass', 'tit'];
const regex = new RegExp('\b'+profaneWords.join('\b|\b')+'\b', 'g');
var newstr = str.replace(regex, '***');
console.log(newstr);