正则表达式功能导致Chrome挂起

时间:2019-04-02 20:37:13

标签: javascript google-chrome-extension

我试图在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会挂起

0 个答案:

没有答案