У меня есть строка, которую я хочу преобразовать, используя 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
Однако процедура не связана с контекстом сопоставления gsub, поэтому такие переменные, как $1
и $2
, недоступны. Я также подтверждаю, что если я просто использую регулярное выражение / преобразование в процессе обычного вызова gsub, например:
my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
"#{$1} #{$2.capitalize},"
end
код работает просто отлично.
Может кто-нибудь сказать мне способ привязать этот процесс к контексту gsub, чтобы я мог получить доступ к $1
и $2
?
Спасибо