Ruby on rails 使用regexp数组转换Ruby w/`gsub`中的字符串

Ruby on rails 使用regexp数组转换Ruby w/`gsub`中的字符串,ruby-on-rails,regex,ruby,binding,proc,Ruby On Rails,Regex,Ruby,Binding,Proc,我有一个字符串,我想使用Ruby的gsub和大量的regexp以及它们在数组中的转换结果来转换它 我喜欢这样做: MY_REGEXPS=[ [ /^(\d-\d:)(单|双|三)/, proc{{{$1}{$2.capitalize},”} ], #..许多用于regexp/转换对 ] my_string=“0:0单(线路驱动器,89XD)” MY_REGEXPS.inject(MY_字符串)do| str,regexp_对| str.gsub(regexp\u pair.first和rege

我有一个字符串,我想使用Ruby的
gsub
和大量的regexp以及它们在数组中的转换结果来转换它

我喜欢这样做:

MY_REGEXPS=[
[ 
/^(\d-\d:)(单|双|三)/,
proc{{{$1}{$2.capitalize},”}
],
#..许多用于regexp/转换对
]
my_string=“0:0单(线路驱动器,89XD)”
MY_REGEXPS.inject(MY_字符串)do| str,regexp_对|
str.gsub(regexp\u pair.first和regexp\u pair.last)
结束
但是,proc没有绑定到gsub匹配的上下文,因此像
$1
$2
这样的变量不可用。我还确认,如果我只是在对gsub的正常调用过程中使用regexp/转换,例如:

my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
  "#{$1} #{$2.capitalize},"
end
代码运行得很好

有谁能告诉我一种方法,让我将该进程绑定到gsub的上下文,这样我就可以访问
$1
$2


谢谢

也许以下或一种变体可以满足您的需要

MY_REGEXPS = [
  [ 
    /^(\p{L}+) (\d:\d) (SINGLE|DOUBLE|TRIPLE) \1/i,
    proc { |_,v2,v3| "#{v2} #{v3.capitalize}," }
  ],
]

my_string = "dog 1:2 single dog (Line Drive, 89XD)"

MY_REGEXPS.inject(my_string) do |s,(re,p)|
  p.call(*s.match(re).captures)
end
  #=> "1:2 Single," 

我已经包含了捕获组#1
(\p{L}+
(匹配一个或多个字母),以显示如何包含与proc计算无关但仍可传递给proc的捕获组。(此处使用捕获组#1以确保该捕获组的内容再次出现在字符串中的指定位置(
\1

正则表达式与字符串不匹配:just changed
my_string=“0-0:SINGLE(Line Drive,89XD)”
并且它对我有效:)有些人可能会将其称为一个。你已经把注意力集中在最后一句话的主题上,可能已经失去了你的最终目标,这可能是通过其他方式实现的。我们有时都会被吸进那个洞里。这当然是需要警惕的。非常聪明,基本上和我最终得到的解决方案相同,有一些外部确认很好。谢谢