无法获取正则表达式捕获组在Ruby on Rails方法中工作

时间:2012-01-08 01:25:39

标签: ruby-on-rails regex expression gsub

我需要使用gsub和正则表达式解析和替换文本。下面是一个简化示例,我将保存其中一个捕获的组 - \ 3 - 用于替换字符串。

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

在第一次使用捕获的值时,我只是显示它来构建新路径。在第二个示例中,我使用捕获的值调用find。第二个例子不起作用。

我尝试了各种方法来转义值(“\ 3”,“\ 3”等)甚至构建了一个方法来测试显示值(工作)或在方法中使用值(不不行。

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

使用gsub的阻止形式,并将\3引用替换为$3全局:

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

我也切换到%Q{}进行引用,以避免引起混淆和串联混淆。

gsub的替换字符串形式中的第二个参数(即您尝试使用的gsub的版本)将在 {之前进行评估和连接在** gsub值可用之前调用{1}} **,因此它不起作用。

顺便说一下,有没有一种方法可以调用\3返回的内容?