为什么JavaScript中的RegExp会给出这个结果?

时间:2017-09-01 16:50:26

标签: javascript regex

我有一个关于'(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,只能匹配一种模式。

1 个答案:

答案 0 :(得分:1)

/(...) (..)/匹配以下字符:

bar foo
^^^^^^

它匹配三个字符,后跟一个空格,后跟两个字符。这些字符将替换为bar

bar fo => bar

现在我们将此替换应用于整个字符串:

bar foo => baro
      ^       ^

.replace仅替换与表达式匹配的字符。所有其他角色都留在原地。您在输出中看到的oo中的最后一个foo,正则表达式未触及该console.log('fast food'.replace(/foo/, 'bar'));。如果这是您的想法,它不会被捕获捕获。

$1

我们可以通过在console.log('bar foo'.replace( /(...) (..)/, '$1-' )) // bar-o之后添加另一个字符来轻松证明这一点:

setHasOptionsMenu(true)