cod*_*red 2 ruby regex gsub ruby-on-rails-4
在我的Rails 4.2.6/Ruby 2.2.4应用程序中,我有一个生成字符串的db查询方法; 例如:
"Chest - pectoralis, Quads - quadriceps, Hamstrings - biceps femoris"
Run Code Online (Sandbox Code Playgroud)
但是,我想要的结果是:
"Chest, Quads, Hamstrings"
Run Code Online (Sandbox Code Playgroud)
该域跟踪21个肌肉群,这意味着生成的字符串可以有许多不同的组合.但是,字符串将始终具有相同的模式,即:"普通肌肉名称 - 技术肌肉名称".
使用条件逻辑,我可以通过将"string"参数传递给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"
Run Code Online (Sandbox Code Playgroud)
这种方法不可行; 这是乏味而脆弱的.必须有更好的方法从生成的字符串中删除破折号和技术名称.我对如何最好地完成这件事感到困惑.是否可以编写正则表达式来实现所需的结果,以及如何?有没有更简单,更好,更清洁的方法来实现我想要做的事情?谢谢!
您可以" -"在地图函数中拆分名称,只返回第一部分,如下所示:
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |