2010-10-11 2 views
5

Obecnie używam tego wyrażenia regularnego wyodrębnić identyfikator wideo z Youtube URL:Jak mogę zmienić to wyrażenie regularne, aby uzyskać identyfikator wideo YouTube z adresu URL serwisu YouTube, który nie określa parametru v?

url.match(/v=([^&]*)/)[1] 

Jak mogę zmienić ten tak, że będzie również uzyskać identyfikator wideo z tego adresu URL Youtube, których nie ma v parametr:

http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU 

Dzięki za przeczytanie.

EDIT: używam Ruby 1.8.7

Odpowiedz

0
url.match(/[^\/]+$/)[0] 

powinny działać w tej sprawie. Spowoduje to dopasowanie wszystkiego, co nastąpi po ostatnim slashu w łańcuchu, więc oczywiście będzie pasować znacznie więcej niż tylko identyfikatory wideo YouTube. Z pytaniem Mam wywodząc, że już wiem, czy link jest link Youtube czy nie (ponieważ Twój regex jest dość niespecyficzne), ale jeśli nie, spróbuj

url.match(/youtube.com.*([^\/]+$)/)[1] 

Chyba że jesteś na Ruby 1.9, nie możesz tego zrobić w jednym regex, ponieważ Ruby 1.8 nie obsługuje lookbehind.

2

Nie ma potrzeby używać wyrażeń regularnych

>> url="http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU" 
=> "http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU" 
>> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1] 
=> "Xc81AajGUMU" 

>> url="http://www.youtube.com/watch?v=j5-yKhDd64s" 
=> "http://www.youtube.com/watch?v=j5-yKhDd64s" 
>> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1] 
=> "j5-yKhDd64s" 
+0

Ale to nie znajdzie adresu URL bez parametru "v =", o to właśnie chodzi. –

+0

Zakładam, że zdążył już zeskrobać pożądany adres URL do 's', to jest" URL Youtube ", o którym wspomniał w swoim pytaniu. – ghostdog74

+0

Zakładam też; chciałem powiedzieć, że nie znajdzie identyfikatora wideo, jeśli ten URL nie zawiera parametru "v =" (patrz jego drugi przykład). –

12

Dla Ruby 1.8.7 to będzie to robić.

url_1 = 'http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf' 
url_2 = 'http://www.youtube.com/user/ForceD3strategy#p/a/u/0/8WVTOUh53QY' 

regex = /youtube.com.*(?:\/|v=)([^&$]+)/ 
puts url_1.match(regex)[1] # => 8WVTOUh53QY 
puts url_2.match(regex)[1] # => 8WVTOUh53QY 
Powiązane problemy