RegExp javascript替换所有不起作用

时间:2013-01-27 16:32:52

标签: javascript regex replace

我对此代码感到困惑

<!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 
第二次点击后

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

为什么有些单词第一次没有改变? 真诚

3 个答案:

答案 0 :(得分:2)

这是因为在你的#demo内容中,两个未被替换的Visit字后面没有空格(第一个有新行,第二个有行结束)。

为了解决问题,您可以将\b用作word boundary/\bVisit\b|Microsoft/gi

DEMO: http://jsfiddle.net/dyz5w/

答案 1 :(得分:1)

这是因为正则表达式中Visit周围的空格:

 / Visit /

这需要在“访问”一词的两侧留出空格。正则表达式匹配不重叠,所以如果你有一个像

这样的字符串
  Visit Visit Visit Visit

....然后每个“访问”实例之间的两个空格只能属于一个匹配。因此,您的正则表达式匹配将如下所示(使用{显示匹配开始的位置,并使用}显示结束位置):

 { Visit }Visit{ Visit }Visit

在“访问”之间用两个空格试试。你会发现它全部都得到了。

编辑:VisioN打败了我;如果你想只匹配单词,他建议使用\b是完美的。

答案 2 :(得分:0)

/ Visit |Microsoft/gi只是意味着

  • 找到“访问”(周围有空格)
  • |(或)
  • 找到“Microsoft”
  • g标志 - 找到所有匹配
  • i标志 - 进行不区分大小写的搜索