我有一系列不同的图片网址,我需要将“/ s_”替换为“/ xl_”。我已经尝试了许多不同的方法,但是没有它们似乎像我期望的那样工作。这是我的最新版本:
available_images.each do |img|
img.gsub(/.*(\/s_).*\.jpg/, "\/xl_")
end
available_images是包含多个字符串的数组(当然与提供的正则表达式匹配:。*(/ s _)。*。jpg)。 关于如何修复的任何想法?
提前致谢!
答案 0 :(得分:1)
使用简单字符串(而不是正则表达式)的gsub!
(!
因为您执行each
而不是map
)应该有效:
"path/to/s_image.jpg".gsub '/s_', '/xl_'
# => "path/to/xl_image.jpg"
<强>更新强>
正如评论中所指出的,如果路径包含多次出现'/s_'
,则解决方案可能会导致意外行为。
"path/s_thing/s_image.jpg".gsub '/s_', '/xl_'
#=> "path/xl_thing/xl_image.jpg"
▲ ▲
Borodin发布了一个很好的,短的正则表达式替换,在这种情况下有效:
"path/s_thing/s_image.jpg".sub %r|/s_(?!.*/)|, '/xl_'
#=> "path/s_thing/xl_image.jpg"
△ ▲
它仅替换最后一次出现的'/s_'
。