簡體   English   中英

在Chrome擴展程序中用Treewalker替換文本

[英]Replacing Text with Treewalker in a Chrome Extension

我在下面找到了如何用Treewalker替換文本的示例: Javascript .replace命令替換頁面文本?

// create a TreeWalker of all text nodes
var allTextNodes = document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT),
// some temp references for performance
tmptxt,
tmpnode,
// compile the RE and cache the replace string, for performance
cakeRE = /cake/g
replaceValue = "pie";

// iterate through all text nodes
while (allTextNodes.nextNode()) {
tmpnode = allTextNodes.currentNode;
tmptxt = tmpnode.nodeValue;
tmpnode.nodeValue = tmptxt.replace(cakeRE,replaceValue);
}

是否可以對其進行修改,以便它可以檢查並替換多個單詞並且不區分大小寫?

要使模式不區分大小寫,可以使用i標志。 [ 更多信息 ]

如果要用一個特定的單詞替換多個單詞,則只需修改正則表達式模式,如下所示:

cakeRE = /word1|word2|.../gi;

如果要用不同的替換值替換每個單詞,則可以創建一組對應的模式替換對並對其進行迭代。 例如:

...
patterns = [/cake/gi, /muffin/gi, /pancake/gi];
replacements = ["pie", "brownie", "cheese-cake"];
...
tmpnode = allTextNodes.currentNode;
patterns.forEach(function(pattern, idx) {
    tmpnode.nodeValue = tmpnode.nodeValue.replace(pattern, replacements[idx]);
});
...

另外,您也可以使用帶有功能的replace變量作為其第二個參數。 [ 更多信息 ]

...
replDict = {
    "cake": "pie",
    "muffin": "brownie",
    "pancake": "cheese-cake"
};
pattern = new RegExp(Object.keys(replDict).join("|"), "gi");
...
tmpnode = allTextNodes.currentNode;
tmpnode.nodeValue = tmpnode.nodeValue.replace(pattern, function(match) {
    return replDict[match];
});
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM