2010-10-11 9 views
5

Al momento sto usando questo regex per estrarre l'ID del Video da un URL Youtube:Come posso modificare questa espressione regolare per ottenere l'ID video di YouTube da un URL Youtube che non specifica il parametro v?

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

Come posso modificare questo in modo che possa anche ottenere l'ID del Video da questo URL Youtube, che non ha v parametro:

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

Grazie per la lettura.

EDIT: sto usando rubino 1.8.7

risposta

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

dovrebbe funzionare in questo caso. Questo corrisponderà a tutto ciò che segue l'ultima barra in una stringa, quindi ovviamente corrisponderebbe molto di più dei soli ID video di Youtube. Dalla tua domanda sto dedurre che si conosce già se un link è un link di Youtube o meno (poiché la vostra regex è anche abbastanza non specifico), ma se non lo fai, provare

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

A meno che non sei in Ruby 1.9, non puoi farlo in una singola regex perché Ruby 1.8 non supporta lookbehind.

2

Non c'è alcuna necessità di utilizzare espressioni regolari

>> 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

Ma questo non troverà un URL senza il 'v =' parametro che è ciò che la questione è di circa. –

+0

Suppongo che abbia già raschiato l'URL desiderato in 's', che è" l'URL di Youtube "di cui ha parlato nella sua domanda. – ghostdog74

+0

Sto assumendo anche questo; quello che intendevo dire era che non troverà l'ID del video se quell'URL non contiene un parametro 'v =' (vedi il suo secondo esempio). –

12

per Ruby 1.8.7 questo lo farà.

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 
Problemi correlati