URL操作:http://example.com/foo.jpg - > http://example.com/foo.preview.png

时间:2010-12-23 12:57:05

标签: ruby-on-rails ruby regex

在rails中我想写一些代码来改变这个url字符串

https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg

https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.png

我应该使用正则表达式来改变吗?

我是Regexp的新手,任何人都可以告诉我如何做到这一点,以及如何学习这些东西

感谢

3 个答案:

答案 0 :(得分:4)

如果扩展名是固定长度的,那么最好使用string slicing

url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
print url[0..-5] + ".preview" + url[-4..-1]

输出

https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpg

如果您的扩展程序长度可变,则可以使用rindex()查找扩展程序的开头。

url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpeg"
dot_index = url.rindex(".")-1
print url[0..dot_index] + ".preview" + url[dot_index+1..-1]

输出

https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg

如果你必须使用正则表达式,那么就这样做:

url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpeg"
print url.gsub(/\.(\w{2,4})$/, ".preview.\\1")

输出

https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.preview.jpeg

答案 1 :(得分:4)

如果您确定文件以.jpg结尾,则可以

url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
url.gsub(".jpg", ".preview.jpg")

否则,您可以获取文件名,然后附加扩展名。

url = "https://img.skitch.com/20101222-kg5chjx4jetgcdeaug46hi6jpk.jpg"
ext = File.extname(url)
url.gsub(ext, ".preview{ext}")

答案 2 :(得分:1)

字符串替换似乎就足够了。  “.jpg” - > “.preview.png” 不幸的是我不知道红宝石。 在python中它将是

new_url = url.replace(".jpg",".preview.png",1)

我认为它在红宝石中会有类似之处。它似乎是sub()

new_url = url.sub(".jpg",".preview.png")