我试图在html页面中找到要替换的特定单词,但是当我运行它时,RegExp()函数导致chrome挂起。下面的代码是发生这种情况的部分
function test(findWord, replaceWord){
var searchregexp = new RegExp(findWord.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "gi");
console.log(searchregexp);
var elements = document.getElementsByTagName('*');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];
if (node.nodeType === 3) {
var text = node.nodeValue;
var replacedText = text.replace(searchregexp, replaceWord);
if (replacedText !== text) {
element.innerHTML = replacedText;
}
}
}
}
}
基于我读过的其他内容,似乎是RegExp函数导致了灾难性的回溯,但是我不太确定为什么会这样或如何解决。
如果我将诸如/ replace / gi之类的特定正则表达式硬编码到text.replace()中,则该代码有效。但是,如果我尝试这样做,则被替换的单词不必一定是常量,并且使用新的RegExp函数chrome会挂起