我对此代码感到困惑
<!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
为什么有些单词第一次没有改变? 真诚
答案 0 :(得分:2)
这是因为在你的#demo
内容中,两个未被替换的Visit
字后面没有空格(第一个有新行,第二个有行结束)。
为了解决问题,您可以将\b
用作word boundary:/\bVisit\b|Microsoft/gi
。
答案 1 :(得分:1)
这是因为正则表达式中Visit
周围的空格:
/ Visit /
这需要在“访问”一词的两侧留出空格。正则表达式匹配不重叠,所以如果你有一个像
这样的字符串 Visit Visit Visit Visit
....然后每个“访问”实例之间的两个空格只能属于一个匹配。因此,您的正则表达式匹配将如下所示(使用{
显示匹配开始的位置,并使用}
显示结束位置):
{ Visit }Visit{ Visit }Visit
在“访问”之间用两个空格试试。你会发现它全部都得到了。
编辑:VisioN打败了我;如果你想只匹配单词,他建议使用\b
是完美的。
答案 2 :(得分:0)
/ Visit |Microsoft/gi
只是意味着
|
(或)g
标志 - 找到所有匹配i
标志 - 进行不区分大小写的搜索