1

私はこのコードと混同しました

<!DOCTYPE html>
<html>

    <body>
        <p>Click the button to replace "Microsoft" with "W3Schools" in the paragraph
            below:</p>
        <p id="demo">Microsoft Visit Microsoft! Microsoft visit visit microsoft Visit Visit
            Visit Visit</p>
        <button onclick="myFunction()">Try it</button>
        <script>
            function myFunction() {
                document.getElementById("demo").innerHTML = document.getElementById("demo").innerHTML.replace(/ Visit |Microsoft/gi, ' test ');
            }
        </script>
    </body>

</html>

ボタンをクリックしたときにいくつかの単語が変更されなかった場合、もう一度クリックすると変更されます

最初のクリック後

test test test ! test test visit test test Visit test Visit 

2回目のクリック後

test test test ! test test test test test test test test 

なぜ最初にいくつかの単語が変わらなかったのですか?心から

4

3 に答える 3

2

これは、#demoコンテンツ内で置換されVisitていない2つの単語の後にスペースがないために発生します(最初の単語には改行があり、2番目の単語には行末があります)。

それを修正するために、代わりに単語の境界\bとして使用することができます:。/\bVisit\b|Microsoft/gi

デモ:http: //jsfiddle.net/dyz5w/

于 2013-01-27T16:39:19.300 に答える
1

Visitそれはあなたの正規表現の周りのスペースのために起こっています:

 / Visit /

それには、「訪問」という単語の両側にスペースが必要です。正規表現の一致は重複しないため、次のような文字列がある場合

  Visit Visit Visit Visit

....その場合、「visit」の各インスタンス間の両方のスペースは、単一の一致にのみ属することができます。したがって、正規表現の一致は次のようになります({一致の開始}場所と終了場所を表示するために使用):

 { Visit }Visit{ Visit }Visit

「Visit」の間に2つのスペースを入れて試してください。あなたはそれがそれらすべてを手に入れるのを見るでしょう。

編集:VisioNは私を打ち負かしました。\b単語だけを一致させたい場合は、彼の使用の提案は完璧です。

于 2013-01-27T16:46:23.620 に答える
0

/ Visit |Microsoft/gi単に意味します

  • 「訪問」を見つける(周りにスペースを入れて)
  • |(また)
  • 「Microsoft」を探す
  • gフラグ-すべての一致を検索
  • iフラグ-大文字と小文字を区別しない検索を行う
于 2013-01-27T16:47:21.357 に答える