部分字符串替换为gsub

时间:2013-08-15 08:40:22

标签: ruby replace gsub

我有一系列不同的图片网址,我需要将“/ s_”替换为“/ xl_”。我已经尝试了许多不同的方法,但是没有它们似乎像我期望的那样工作。这是我的最新版本:

available_images.each do |img|
    img.gsub(/.*(\/s_).*\.jpg/, "\/xl_")
end

available_images是包含多个字符串的数组(当然与提供的正则表达式匹配:。*(/ s _)。*。jpg)。 关于如何修复的任何想法?

提前致谢!

1 个答案:

答案 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_'