我有一个关于 '(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
,只能匹配一种模式。
/(...) (..)/
匹配以下字符:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句