Как заменить каждый символ до определенной точки другим символом, если выполняется условие?
string = "401200******7777" string.gsub!(/^\d+/) { |m| "*" * m.length } puts string # ************7777
Есть ли более простой / лучший способ сделать это?
Не могу попробовать прямо сейчас, но это должно сработать:
string.gsub!(/(\d)(?=.*\*)/, '*')
Хммм ... единственный способ, который я изобрел сейчас, это использовать переменную флага + два регулярных выражения :
string = "401200******7777" flag = true string.gsub!(/./) { |i| (flag &&= i[/\d/]) ? "*" : i}
Но это не oneliner ...