2010-12-14 63 views
2

我想借此鏈接..如何將此鏈接與Rails互換?

http://www.youtube.com/watch?v=4lzi_3SM9-o 

,把它變成這樣:

http://www.youtube.com/v/4lzi_3SM9-o 

要做到這一點,我需要一些方法來捕捉watch?v=v/

其切換我想在我的模型中使用def tube_link

任何想法?

回答

3

無需正則表達式,只需使用字符串替換:

url["watch?v="] = "v/" 

予以警告,你可能會得到一個指標差,如果你的東西指數是不是的字符串中。(有關詳細信息,請參閱here。)

編輯:像這樣的東西可能更可讀(更可靠):

newUrl = oldUrl.gsub("watch?v=", "v/") 
+0

哇有趣。謝謝你! – Trip 2010-12-14 21:43:32

+0

你的第一個解決方案唯一的問題是,如果'url'不包含'watch?v =',那麼你很可能會得到一個錯誤。 ('IndexError:字符串不匹配'在我這裏,但可能取決於你的設置)。這使gsub成爲更好的選擇,因爲如果找不到模式,gsub將不會執行任何操作。 – 2010-12-14 22:03:54

+0

@Brett Bender:哦,非常好。我將編輯答案以反映這一點。 – 2010-12-14 22:21:34

4
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch?v=", "v/") 
2

您應該替換單引號雙引號。這將節省您的時間

t1 = Time.now 
for i in 1..100000 
    "http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch\?v=", "v/") 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
1.173 

t1 = Time.now 
for i in 1..100000 
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub('watch\?v=', 'v/') 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
0.406 

1.173比。 0.406

+0

哇!瘋!這是爲什麼? – Trip 2010-12-15 17:09:26

+0

當你用雙引號寫字符串時,ruby會進行字符串插值,這會減慢進程的速度。 – crazycrv 2010-12-16 04:52:23