#ruby #regex
#ruby #регулярное выражение
Вопрос:
Я новичок в регулярных выражениях в Ruby.
Строка выглядит примерно так http://www.site.com/media/pool/product_color_purple.jpg
, и я пытаюсь извлечь из этого только тот бит, в котором указан цвет. Это может быть переменной длины, так как некоторые цвета похожи prince_purple.jpg
.
Итак, у меня есть:
colour = c.attr('src').match(/(.*)color_(.*).jpg/)
puts "Colour is #{colour}"
Какой цвет возвращает, это снова строка, вместо извлеченного бита, который является цветом. Что здесь происходит не так?
Комментарии:
1.
match
возвращаетMatchData
и «mtch[0] эквивалентно специальной переменной $amp; и возвращает всю сопоставленную строку. mtch[1], mtch[2] и так далее возвращают значения соответствующих обратных ссылок» — ruby-doc.org/core/classes/MatchData.html2. Ваша ссылка не работает. Здесь лучше показать то, что вы хотели показать.
Ответ №1:
str="http://www.site.com/media/pool/product_color_purple.jpg"
colour = str.match(/color_([^/.]*).jpg$/)
puts "Colour is #{colour[1]}"
Вы не получаете «Цвет фиолетовый», потому что match возвращает MatchData, а не string
Ответ №2:
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.scan(/color_(.*).jpg/)[0][0]
#=> purple
или
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url.match(/color_(.*).jpg/)[1]
#=> purple
Ответ №3:
Без регулярного выражения в качестве примера другого способа сделать это
url="http://www.site.com/media/pool/product_color_purple.jpg"
color = url[url.rindex("_") 1..-1].split(".")[0]
Хотя для этого я бы придерживался регулярного выражения.
color = url.match(/.*_(.*)./)[1]
Ответ №4:
>> s = %w(http://www.site.com/media/pool/product_color_purple.jpg http://www.site.com/media/pool/product_color_prince_purple.jpg)
#=> ["http://www.site.com/media/pool/product_color_purple.jpg", "http://www.site.com/media/pool/product_color_prince_purple.jpg"]
>> s.map { |c| c.match(/w*_color_(w ).jpg/)[1] }
#=> ["purple", "prince_purple"]
Ответ №5:
Вы можете попробовать это регулярное выражение.
/color_(.*)?.jpg/