Не удалось получить захваченную регулярное выражение группу, работающую в методе Ruby on Rails - PullRequest
0 голосов
/ 08 января 2012

Мне нужно разобрать и заменить текст, используя gsub и регулярное выражение.Ниже приведен упрощенный пример, где я сохраняю одну из захваченных групп - \ 3 - для использования в моей строке замены.

my_map.gsub(/(\shref=)(\")(\d+), ' href="/created_path/' + '\3' + '" ' + ' title="' + AnotherObject.find('\3')'"')

При первом использовании захваченного значения я просто отображаю его для построения нового пути.Во втором примере я вызываю находку с захваченным значением.Второй пример не будет работать.

Я пробовал различные способы экранирования значения ("\ 3", '' \ 3 '' и т. Д.) И даже создал метод для проверки отображения значения (работает) или используя значение в методе (не работает).

Любой совет приветствуется.

1 Ответ

1 голос
/ 08 января 2012

Используйте блочную форму gsub и замените ваши \3 ссылки на $3 глобальные:

my_map.gsub(/(\shref=)(\")(\d+)/) { %Q{ href="/created_path/#{$3}" title="#{AnotherObject.find($3)"} }

Я также переключился на %Q{} для цитирования, чтобы избежать путаницы в смешивании и объединении цитат.

Второй аргумент в форме строки замены gsub (т. Е. Версия gsub, которую вы пытаетесь использовать) будет оценен и объединен до вызова gsub и ** до ** доступно значение \3, поэтому оно не будет работать.

Кроме того, есть ли метод, который вы должны вызывать для того, что AnotherObject.find($3) возвращает?

...