我正在使用gsub方法,并使用// 1来获取后向引用。
在那,比方说,
map = {" Stack" => "溢出"}
"#1" .gsub(/(栈)上溢/"非\\ 1&#34)
将打印"NonStack"
。我正确地得到了这个。
但我想在这里使用地图,例如
"Stackoverflow".gsub("/(Stack)overflow/","#{$map['\\1']}")
以便打印overflowoverflow
。但我尝试了各种组合,但我没有得到这个。
答案 0 :(得分:1)
您可以使用块,然后全局变量$1
.. $9
保持匹配。这实现了你想要的:
map = { 'stack' => 'overflow' }
p "stackoverflow".gsub(/(stack)(overflow)/) { map[$1] + $2 }
# => overflowoverflow
或者,您可以将变量传递给块:
map = { 'stack' => 'overflow' }
p "stackoverflow".gsub(/stack/) { |match| map[match] }
# => overflowoverflow
请参阅String#gsub以供参考。