为什么 gsub 的 '\1' 捕获组会产生这个字符串?

Why does gsub's '\1' capture group produce this string?

我很困惑为什么要通过 '\1' 分组来捕捉这种模式。我一次捕获两位数,但为什么它会跳过这里:

"123 456 789".gsub(/(\d)(\d)/, '')
=> "13 46 79"

我可以理解 '\0' 给我原始字符串:

"123 456 789".gsub(/(\d)(\d)/, '[=11=]')
=> "123 456 789"

这也让我很困惑,但是一旦我了解'\1'是做什么的,我就能理解'\2':

"123 456 789".gsub(/(\d)(\d)/, '')
=> "23 56 89"

正则表达式匹配 "12""45""78"gsub 将它们替换为 "1""4""7",分别给出 "13 46 79".

要获得12 45 78,您需要使用

(\d)\d\b

并替换为</code>。</p> <p>见<a href="https://regex101.com/r/zA0hK7/2" rel="nofollow">demo</a></p> <p>在这里,我们匹配一个数字并捕获它(<code>(\d)),然后我们匹配另一个位于单词边界\b之前的数字(\d)。

IDEONE demo:

puts "123 456 789".gsub(/(\d)\d\b/, '')