Ruby on Rails: 从URL我想获得一个特定的值,我正在检查包含该值的URL是否使用数组。如果它具有该值,我将拆分URL并返回值。
@url = 'http://fruits.com/A15/abc1234-apple-w740_h550_q58.jpg'
['apple','banana','grape','butter','honey'].each do |fruit|
if (@url.include? fruit)
return @url.split(fruit)[1].freeze
end
end
我不想循环5次.. 问题是如何压缩这个循环。
答案 0 :(得分:3)
您可以将正则表达式传递给String#split
:
@url = 'http://fruits.com/A15/abc1234-apple-w740_h550_q58.jpg'
@url.split(/apple|banana|grape|butter|honey/)[1]
#=> "-w740_h550_q58.jpg"
或者,使用String#[]
:
@url[/(apple|banana|grape|butter|honey)(.*)/, 2]
#=> "-w740_h550_q58.jpg"
或者,使用positive lookbehind来避免第二个论点:(帽子提示为mudasobwa)
@url[/(?<=apple|banana|grape|butter|honey).*/]
#=> "-w740_h550_q58.jpg"
答案 1 :(得分:2)
试试这个:
url = 'http://fruits.com/A15/abc1234-apple-w740_h550_q58.jpg'
['apple','banana','grape','butter','honey'].select { |f| url.include? f }
答案 2 :(得分:1)
这个应该有效:
@url = 'http://fruits.com/A15/abc1234-apple-w740_h550_q58.jpg'
def last_part_of_url
fruit = ['apple','banana','grape','butter','honey'].detect { |f| @url.include?(f) }
@url.split(fruit).last if fruit
end