Удобный способ использования регулярного выражения и gsub в Ruby.

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

Например у нас есть строка, в которой вместо пробелов %20:

str = "Cats%20Are%20Here"

Поменяем в этой строке кошек на собак, а также "%20" заменим на пробел. Для этого сделаем хэшик ключ/значение, где ключ - исходное состояние.

what_to_change = {'Cats' => 'Dogs', '%20' => ' '}
Далее создадим регулярку при помощи Regexp.union:

re = Regexp.union(what_to_change.keys)
=> /Cats|%20

И наконец, магия. Используем наше регулярное выражение и хэшик с нужными значениями:

str.gsub(re, what_to_change)
=> "Dogs Are Here"
В итоге мы почистили строку от ненужных символов и поменяли кошек на собак для (потому что можем) наглядности.
Наверх