\ 1做什么?
例如
"foo bar bag".gsub(/(bar)/,'car\1')
我相信这与你如何使用括号有关,但我不太确定.有人可以向我解释一下吗?你可以做像\ 2这样的东西吗?如果是这样,那会怎么做?
Jam*_*mey 24
每次您在搜索部括号围绕项目将对应于若干\1,\2等等,以替代部分.
在你的例子中,只有一个项目被括号括起来,"(bar)"项目,所以你放置的任何地方\1都是括号中的部分,将被交换.你可以\1多次放入,如果你想重复这个,这很方便找到项目,所以你可以合法地写car\1\1\1,"bar"并将被交换三次.
没有用,\2因为只有一个项目被括号括起来.但是,如果你有(bar)(jar),那么\1代表"bar"并\2代表"jar".
你甚至可以做这样的事情:
\1\2\1\2\2\1
这会成为:
barjarbarjarjarbar
这是一个真实的例子,它可以派上用场.假设你有一个这样的名单:
Jones, Tom  
Smith, Alan  
Smith, Dave  
Wilson, Bud
你想把它改成这个:
Tom Jones  
Alan Smith  
Dave Smith  
Bud Wilson
你可以搜索:
(.+), (.+)
并替换为:
\2 \1
您也可以替换为:
\1: \2 \1  
哪个会成为:
Jones: Tom Jones  
Smith: Alan Smith  
Smith: Dave Smith  
Wilson: Bud Wilson
一般来说\N,用正则表达式中指定的第N组替换.第一个匹配的组引用,\1最大组数为9.
一些例子:
# wrap every integer into brackets
'1 2 34'.gsub(/(\d+)/, '[\1]')
# => "[1] [2] [34]"
# gsub with two groups: swap couples of integers
'<1,2> <3,4>'.gsub(/(\d+),(\d+)/, '\2,\1')
# => "<2,1> <4,3>" 
# you can reference the same group more than once
'1 2 34'.gsub(/(\d+)/, '<\1,\1>')
#  => "<1,1> <2,2> <34,34>"
# a slightly more complex example
'Jim Morrison'.sub(/([A-Z])[a-z]+ ([A-Z][a-z]+)/, '\2 \1.')
# => "Morrison J."