我正在从redis (也就是我的项目的控制器)那里得到一个数组,我需要在我的产品视图中重构它。
数组(显示两个结果,但它可以有更多结果):["project-5", "project-4"]
数字(5,4)是我的项目id (@project.id),我需要减去它才能在.each do函数中使用。
我能找到的就是多变量的解析式。但这里我只有一个变量。
有人能帮我把产品id从这个数组中分离出来吗?
发布于 2015-10-26 09:57:39
您可以使用匹配方法在regex的帮助下获取ids。假设array由您的projetcs和id-s、3和44组成,那么一个一行将是:
2.0.0-p353 :091 > array.map{|el| el.match(/\d+$/)[0]}
=> ["3", "44"] 如果您确实需要使用.each do,那么
array.each do |el|
el.match(/\d+$/)[0]
end您还可以使用方法gsub和regex替换除id之外的所有字符串中的空字符串,因此只保留id-字符串的一部分。用于此(array = ["proj3ct-3", "project-1567"])的单线:
2.0.0-p353 :040 > array.map {|el| el.gsub(/(.*\-)[^\d]*/, "")}
=> ["3", "1567"].each do类似于前面使用match的示例。
编辑:如果您希望do-block返回已经格式化的数组,那么您应该使用gsub中的邦-法:el.gsub!(/(.*\-)[^\d]*/, ""),这也会对元素进行更改。非爆炸方法只返回更改的值,而不改变它们。
如果您不知道并且希望测试/分析您的正则表达式,那么这是一个很好的地方--我已经使用它很久了。另外,这里也是重新检查一些基本知识的好地方。
https://stackoverflow.com/questions/33341542
复制相似问题