【发布时间】:2019-05-02 18:25:42
【问题描述】:
我有一个字符串,我想使用 Ruby 的 gsub 和大量的正则表达式以及它们在数组数组中的转换结果进行转换。
我喜欢做这样的事情:
MY_REGEXPS = [
[
/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/,
proc { "#{$1} #{$2.capitalize}," }
],
#....Many for regexp/transformation pairs
]
my_string = "0:0 SINGLE (Line Drive, 89XD)"
MY_REGEXPS.inject(my_string) do |str, regexp_pair|
str.gsub(regexp_pair.first, ®exp_pair.last)
end
但是,proc 没有绑定到 gsub 匹配的上下文,所以像 $1 和 $2 这样的变量不可用。我还确认,如果我只是在正常调用 gsub 的过程中使用正则表达式/转换,例如:
my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
"#{$1} #{$2.capitalize},"
end
代码运行良好。
谁能告诉我一种方法让我将该 proc 绑定到 gsub 的上下文,以便我可以访问 $1 和 $2?
谢谢
【问题讨论】:
-
正则表达式与字符串不匹配:刚刚更改了
my_string = "0-0: SINGLE (Line Drive, 89XD)",它对我有用:) -
有些人可能将此称为XY problem。你已经把注意力集中在你最后一句话的主题上,可能已经忘记了你可能通过其他方式实现的最终目标。有时我们都会被吸进那个洞。这当然是要提防的。
标签: ruby-on-rails regex ruby binding proc