我有一个关于'(x)'的问题RegExp模式。这是我的代码。
// normal code:
console.log('bar foo'.replace( /(...) (...)/, '$1 $2' )) //foo bar
它匹配3个长度str并使每个成为组,并根据我的理解改变它们的位置。
console.log('bar foo'.replace( /(...) (..)/, '$1' )) //baro
为什么这个RegExp匹配' bar'和' o'?怎么能带来' o'到结果?
我认为结果应该只是' bar',因为$1
,只能匹配一种模式。
答案 0 :(得分:1)
/(...) (..)/
匹配以下字符:
bar foo
^^^^^^
它匹配三个字符,后跟一个空格,后跟两个字符。这些字符将替换为bar
:
bar fo => bar
现在我们将此替换应用于整个字符串:
bar foo => baro
^ ^
.replace
仅替换与表达式匹配的字符。所有其他角色都留在原地。您在输出中看到的o
是o
中的最后一个foo
,正则表达式未触及该console.log('fast food'.replace(/foo/, 'bar'));
。如果这是您的想法,它不会被捕获捕获。
$1
我们可以通过在console.log('bar foo'.replace( /(...) (..)/, '$1-' )) // bar-o
之后添加另一个字符来轻松证明这一点:
setHasOptionsMenu(true)