на кодварсе была задачка, перевести строчку в камл кейс. 

 

str="The_Stealth_Warrior"
p to_camel_case(str)
str="the-stealth-warrior"
p to_camel_case(str)

def to_camel_case(str)
  str.gsub(/[_-](.)/) {"#{$1.upcase}"}
end

Ответ красивый в одну строчку, с использованием именованных групп. Вот о них и  о тонкостях gsub напишу себе шпаргалку.

str="The_Stealth_Warrior"
p str.gsub(/(([_-])(.))/) {"0#{$&}0 1#{$1}1 2#{$2}2  3#{$3}3"}

Нумерация именованных групп слева. $& - вывожу результат всей регулярки, в $1 первая общая группа (([_-])(.)), $2  ([_-]) и в третьей  (.)

две строчки кода ниже выдадут одинаковый результат

p str.gsub(/(([_-])(.))/) {}
p str.gsub(/(([_-])(.))/, '' )

Можем в цикле использовать результат полученный регуляркой, что то с ним сделать,

p str.gsub(/(([_-])(.))/) {|match| match[0] }