2016-09-12 7 views
0

このスクリプトを使用して、JSのテキストノードの内容を変更しています。 Greasemonkeyでこのスクリプトをirun:文書内のテキストノードの内容をグローバルに変更する

(function() { 
    var replacements, regex, key, textnodes, node, s; 

    replacements = { 

    "facebook": "channelnewsasia", 
    "Teh": "The", 
    "TEH": "THE", 
    }; 

regex = {}; 
for (key in replacements) { 
    regex[key] = new RegExp(key, 'g'); 
} 

textnodes = document.evaluate("//body//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

for (var i = 0; i < textnodes.snapshotLength; i++) { 
    node = textnodes.snapshotItem(i); 
    s = node.data; 
    for (key in replacements) { 
     s = s.replace(regex[key], replacements[key]); 
    } 
    node.data = s; 
} 

})(); 

本当にうまくいきます。

私の問題を除いて、私は値0を75に変更しようとしています。しかし今日の日付のように、日付に含まれるページの他の0も変更しています。

私が望むものではありません。私はそれだけで0を変えたいと思う。これについてどうすればいいですか?

ありがとうございました。

答えて

0

これは正規表現が必要です。あなたのスクリプトは正規表現をサポートしています。必要な置換えのリストに入れるだけです。

単一ゼロに一致する正規表現は、次のようになります。(?:[^0-9]|^)(0)(?:[^0-9]|$)。これは、非数値が0の前後にある必要があることを宣言することによって動作します。

あなたは代替品のリストにこれを置くことができます:あなたのコードへ

注:

replacements = { 
    "(?:[^0-9]|^)(0)(?:[^0-9]|$)": "75", 
}; 

Alternativelly、ゼロは常にスペースで区切られている場合、ちょうどこの表現を使います

  • システムでは、すべての置換テンプレートを正規表現として扱う必要があることに注意してください。したがって、それらの文字を文字通り扱いたい場合は、([または.のような文字を置き換えることを忘れないでください。
  • 自己呼び出し式でuserscript全体をラップする必要はなく、userscript変数スコープはすでにグローバルスコープから隠されています。
+0

なぜ '\ b0 \ b'ではないのですか? – wOxxOm

+0

@wOxxOm '\ [character]'ショートカットは覚えていません。また、 '^'と '$'は必須です。 –

+0

オハイオ州、 '\ b'が何であるか分かったので、それは理想的だと思いますが、OPは明示的にゼロが単語として分離されるとは明言していませんでした。私は答えを更新します。 –