【问题标题】:Can't get regex captured group working in Ruby on Rails method无法在 Ruby on Rails 方法中获取正则表达式捕获的组
【发布时间】:2012-01-08 01:25:38
【问题描述】:

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

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

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

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

感谢任何建议。

【问题讨论】:

    标签: ruby-on-rails regex expression gsub


    【解决方案1】:

    使用 gsub 的块形式并将您的 \3 引用替换为 $3 全局变量:

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

    我还切换到 %Q{} 进行引用以避免混淆引用混合和连接。

    gsub 的替换字符串形式的第二个参数(即您尝试使用的 gsub 的版本)将被评估并连接 之前 gsub 被调用并且 **before **\3 值可用,因此它不起作用。

    顺便说一句,您是否应该调用 AnotherObject.find($3) 返回的方法?

    【讨论】:

    • 这很好用,mu。是的,我正在调用另一种方法,但为了简单起见,这里没有包含它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 2012-10-10
    • 2018-08-20
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多