0

以下のテキストを Treewalker に置き換える方法の例を見つけました: Javascript .replace command replace page text?

// 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);
}

これを変更して、複数の単語をチェックして置換し、大文字と小文字を区別しないようにすることはできますか?

4

1 に答える 1

0

パターンで大文字と小文字を区別しないようにするには、iフラグを使用できます。[詳細]

複数の単語を 1 つの特定の単語に置き換えたい場合は、正規表現パターンを次のように変更します。

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または、 2 番目のパラメーターとして関数を使用してバリエーションを使用することもできます。[詳細]

...
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];
});
...
于 2013-11-09T06:44:51.410 に答える