Как использовать строковый метод gsub в Ruby? (String#gsub)
gsub - строковый метод в Ruby, который позволяет осуществлять поиск в строке и заменять все найденные результаты на новое заданное значение из переданного аргумента.
sentence = "I love cats" sentence.gsub('cats','dogs')
=> "I love dogs"
Возвращает модифицированную копию строки. Проверим исходную переменную:
sentence => "I love cats"
Метод gsub принимает два аргумента - что заменить и на что заменить.
sentence.gsub('поменяй меня','на этот текст')
Помимо этого, данный метод позволяет использовать регулярные выражения, что добавляет больше гибкости нашим действиям:
sentence = "Этот товар стоил 5 долларов" sentence.gsub(/\d+/,"20") => "Этот товар стоил 20 долларов"
При помощи регулярного выражения \d+ мы нашли цифру и заменили ее на значение из второго аргумента.
Очень полезной является поддержка блоков. Рассмотрим пример изменения стоимости товара:
sentence = "Current price $10"
Применим 30% скидку на цену указанную в этой строке:
sentence.gsub(/\d+/) { |n| n.to_i - ((n.to_i * 30) / 100) } => "Current price $7"
В качестве второго аргумента gsub может принять хеш, что очень полезно, когда нужно заменить несколько элементов на разные значения.
Рассмотрим пример, где нужно убрать из строки ненужные элементы, а именно "rgb(" и ")". В результате нужно получить только числовое значение RGB цвета:
color = "rgb(0, 0, 0)" color.gsub(/[rgb()]/, 'rgb(' => '', ')' => '') => "0, 0, 0"
Обратите внимание, что в качестве нового значения намеренно передавалось пустое значение (этого мы и добивались).
Рассмотрим пример с не пустым значением:
color = "rgb(0, 0, 0)" color.gsub(/[()]/, '(' => 'a(', ')' => ', 1)') => "rgba(0, 0, 0, 1)"
Таким образом мы изменили нашу строку используя хеш в качестве второго аргумента метода gsub.
Использование данного метода с восклицательным знаком в конце (gsub!) изменяет значение исходной переменной.
color = "rgb(0, 0, 0)" => "rgb(0, 0, 0)" color => "rgb(0, 0, 0)" color.gsub!(/[()]/, '(' => 'a(', ')' => ', 1)') => "rgba(0, 0, 0, 1)" color => "rgba(0, 0, 0, 1)"