Операция с Ruby-строкой не работает в захваченной группе - PullRequest
3 голосов
/ 11 ноября 2010

Эта подстановка строк работает:

"reverse, each word".gsub(/(\w+)/, "\\1a")
=> "reversea, eacha worda"

и тому подобное, что в основном одинаково с одинарными кавычками:

"reverse, each word".gsub(/(\w+)/, '\1a')
=> "reversea, eacha worda"

но если я попытаюсь изменить строку, произойдет сбой:

"reverse, each word".gsub(/(\w+)/, "\\1a".reverse)
=> "a1\\, a1\\ a1\\"

Я играл с ним, но не могу заставить работать обратную операцию.

Ответы [ 2 ]

9 голосов
/ 11 ноября 2010

Я сталкиваюсь с этим все время. Группы захвата доступны в области видимости блока, поэтому переписать так:

"reverse, each word".gsub(/(\w+)/) { |match| $1.reverse + "a" }

или поскольку ваш матч - группа, вы можете полностью исключить группу

"reverse, each word".gsub(/\w+/) { |match| match.reverse + "a" }
0 голосов
/ 11 ноября 2010

Вы приказали ruby ​​заменить все вхождения / (\ w +) / на "\ 1a" .reverse

"reverse, each word".gsub(/(\w+)/, "\\1a".reverse)

Вы, вероятно, хотели изменить результат, а не строку замены:

"reverse, each word".gsub(/(\w+)/, "\\1a").reverse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...