2017-05-18 4 views
0

これはReplace text in a websiteのスレッドのフォローアップです。ウェブサイトでテキストを置き換えるに@Paulproで与えテキスト置換JavaScriptで正規表現を使用

トップの答えは魔法のように動作しますが、私は最後の行で正規表現を使用する方法がわからない:

replaceTextOnPage('original text', 'new text')

私は('bingogame'で見つかったマッチを除く)'bridge'でテキスト'bingo'を置き換えるために

replaceTextOnPage(/(?!bingogame)bingo/g, 'bridge')

のようなものを使用しようとしたが、スクリプト全体がそのことで台無しにされた:

function replaceTextOnPage(from, to){ 
    getAllTextNodes().forEach(function(node){ 
     node.nodeValue = node.nodeValue.replace(new RegExp(quote(from), 'g'), to); 
    }); 

    function getAllTextNodes(){ 
     var result = []; 

     (function scanSubTree(node){ 
      if(node.childNodes.length) 
       for(var i = 0; i < node.childNodes.length; i++) 
        scanSubTree(node.childNodes[i]); 
      else if(node.nodeType == Node.TEXT_NODE) 
       result.push(node); 
     })(document); 

     return result; 
    } 

    function quote(str){ 
     return (str+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 
    } 
} 

replaceTextOnPage(/(?!bingogame)bingo/g, 'bridge') 

誰か正規表現を正しく組み込む方法を教えてもらえますか?私の愚かさを許してください。おばあちゃんはここで話す。

+0

引用関数は文字列を期待していますが、リテラル正規表現を渡しています。元の質問への答えでは、replaceTextOnPageに渡された2つのパラメータは両方とも文字列です。それはエラーを起こさないかもしれませんが、私は、見積もり(正規表現)の結果があなたが期待するパターンであることを三重にチェックします。 – James

+0

このリンクには、正規表現が使用されていない場合のスクリプトの動作と、正規表現を含める場合の失敗の方法が示されています。私はそれを変更する方法がわかりません:( –

答えて

1

を置く必要があります私はあなたが渡している場合、あなたは正規表現リテラルを渡している場合、引用符関数を呼び出すスキップ(とそれが実行できるようにしたいと思います文字列で)。

はこの試してみる:

function quote(str){ 
    // don't do anything if the parameter is an object (regex literal) 
    if (typeof str == 'object') return str; 

    return (str+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 
} 
+0

ああ私....それは動作します!私は事実上脳死ですコンピュータ〜しかし、多くのありがとう、ジェームス:) :)投稿はもう一度〜 –

0

あなたはinnerText

var text = document.getElementsByTagName("p")[0]; 
 
//match only "bingo" 
 
text.innerText = text.innerText.replace(/\bbingo\b/gi, "bridge")
<p>bingoo bingo bbingo bingogame bingo bingo game bing bingoggame</p>

+0

あなたの答えをありがとう!このメソッドは動作しますが、私はウェブサイトがjavascriptを使用していることを忘れていましたが、残念ながら、上記の方法はウェブサイトのコードを駄目にするので、@Paulproのメソッドが必要です。 –