ruby - 编写正则表达式作为 gsub 的参数!方法——难倒?

标签 ruby regex ruby-on-rails-4 gsub

在我的 Rails 4.2.6/Ruby 2.2.4 应用程序中,我有一个生成字符串的数据库查询方法;例如:

"Chest - pectoralis, Quads - quadriceps, Hamstrings - biceps femoris"

然而,我想要的结果是:

"Chest, Quads, Hamstrings"

域跟踪 21 个肌肉群,这意味着生成的字符串可以有很多不同的组合。但是,该字符串将始终具有相同的模式,即:“普通肌肉名称 - 技术肌肉名称”。

使用条件逻辑,我可以通过将“字符串”参数传递给 gsub 方法来获得我想要的结果,如下所示:

 if @muscle_group_ids == [1, 13, 14]
    @muscle_group_names = MuscleGroup.where(id: @muscle_group_ids).map { |n|   n[:name]
   }.join(', ').gsub!("Chest - pectoralis", "Chest").gsub!("Quads -    quadriceps", "Quads").gsub!("Hamstrings - biceps femoris", "Hamstrings")
end
=> "Chest, Quads, Hamstrings"

这种方法不可行;它既乏味又脆弱。必须有更好的方法来从生成的字符串中删除破折号和技术名称。我对如何最好地完成这项工作感到困惑。是否可以编写一个正则表达式来达到预期的结果,如何实现?是否有更简单、更好、更清洁的方法来实现我想要做的事情?谢谢!

最佳答案

您可以在 map 函数中将名称拆分为 "-",然后只返回第一部分,如下所示:

if @muscle_group_ids == [1, 13, 14]
    @muscle_group_names = MuscleGroup.where(id: @muscle_group_ids).map { |n|   
        n = n[:name].split(" -")[0] 
    }.join(', ')
end
=> "Chest, Quads, Hamstrings"

关于ruby - 编写正则表达式作为 gsub 的参数!方法——难倒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42818425/

相关文章:

ruby-on-rails - 具有连接和顺序的不同记录

ruby-on-rails - Ruby Rails 中的 Heisenbug 错误

ruby-on-rails - Rails 4 before_filter :authenticate_user! , :except => ["some function name"]

ruby-on-rails - 除了在 Rails Controller 中使用局部变量之外,还有更好的替代方法吗?

ruby-on-rails - 如何阻止 Rails Admin 截断字段?

Python,正则表达式,提取大括号内的分组电子邮件

javascript - 在 Node.js 中实现更好的正则表达式的方法

css - Ruby on Rails,连接后 css 中的 url() 损坏

python - 在csv excel文件中对相关数据进行分组

ruby - Rails axlsx gem 加载文件