Using named capture groups inside Ruby gsub blocks (regex)

Chris picture Chris · May 16, 2013 · Viewed 7.2k times · Source

I'm trying to use a named capture group inside a block in Ruby. $1 still works, but I'd like to reference it using the name I gave.

"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
  puts "$1 = #{$1} and $my_word = #{$my_word}"
end

Expected:$1 = (bar) and $my_word = (bar)

Answer

oldergod picture oldergod · May 16, 2013

You are looking for

"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
  puts "$1 = #{$1} and $my_word = #{$~[:my_word]}"
end