С помощью String#gsub
я могу вставить строки разрыва в атрибут replace:
"my string".gsub(/\s/, "\n") #=> "my\nstring"
Но если я также хочу использовать часть совпадения регулярного выражения в атрибуте replace, я буду вынужден использовать одинарные квоты ('). И тогда я не знаю, как вставить разрывную линию.
Я пробовал:
> "my string".gsub!(/(my )/, '\1\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\\\n')
=> "my \\\\nstring"
> "my string".gsub!(/(my )/, '\1\\\\\n')
=> "my \\\\nstring"
Ничего не работает.
🤔 А знаете ли вы, что...
Ruby предоставляет инструменты для создания RESTful веб-сервисов.
Вам не нужно использовать одинарные кавычки. Просто используйте двойные кавычки и замените \1
на \\1
:
irb> "my string".gsub(/(my )/, "\\1\n")
=> "my \nstring"
Разница между одинарными и двойными кавычками заключается в том, что в строках с одинарными кавычками нельзя использовать escape-последовательности (кроме одинарных кавычек). Эти строки эквивалентны:
irb> '\1' == "\\1"
=> true
irb> '\n' == "\\n"
=> true
Вы можете использовать несколько стилей кавычек одновременно. Хотя это используется редко, в Ruby вы можете смешивать и сопоставлять строковые литералы с разными стилями кавычек.
Из документации:
Любая комбинация соседних строк с одинарными, двойными кавычками и процентами будет объединяться, если строка с процентами не является последней.
Применительно к вашей проблеме:
"my string".gsub(/(my )/, '\1' "\n")
#=> "my \nstring"
В приведенном выше коде '\1' "\n"
представляет один экземпляр строки. Вы также можете вставить эти объединенные литералы в IRB, и он вернет эквивалент строкового литерала в двойных кавычках:
'\1' "\n"
#=> "\\1\n"
Что, в свою очередь, вы можете использовать в своем коде:
"my string".gsub(/(my )/, "\\1\n")
#=> "my \nstring"