p '12345678'.reverse.scan(/.{1,4}/).join(' ').reverse
# => "1234 5678"
Почему двойной reverse
?Чтобы длина строки не была кратна четырем, группа нечетного размера будет слева:
p '123456'.reverse.scan(/.{1,4}/).join(' ').reverse
# => "12 3456"
Если вы знаете, что ваша строка всегда будет кратна четырем, илине обращайте внимания на группу странного размера, находящуюся справа, затем пропустите два вызова на reverse
.
p '123456'.scan(/.{1,4}/).join(' ')
# => "1234 56"