gsub
может быть передан блок для параметра «заменить на», результат блока вставляется в место, где найдено совпадение. Аргументом блока является совпавшая строка. Таким образом, чтобы реализовать это, мы собираем как можно больше пробелов (/\s+/
) и передаем их в блок каждый раз, когда найден раздел, возвращая длину этой строки, которая возвращается туда, где изначально был пробел.
Код:
s = "hello, how are you ?"
res = s.gsub(/\s+/) { |m| m.length }
puts res
# => hello,3how10are2you1?