2011-03-13 48 views
1

如何驗證一個YouTube 播放列表使用正則表達式的網址?
我已經找到了答案,用於驗證其他問題視頻..
/^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?$/使用正則表達式驗證YouTube播放列表URL

但我只是無法驗證這樣的網址:
http://www.youtube.com/watch?list=PL1F9CA2A03CF286C2&v=pFS4zYWxzNA&

http://www.youtube.com/watch?v=pFS4zYWxzNA&list=PL1F9CA2A03CF286C2&

回答

2

試這

^http:\/\/(?:www\.)?youtube\.com\/watch\? #you forgot to mask the dot before com 
(          #may lead to wrong parsing 
    (v=.*&list=.*)| #v and then list 
    (list=.*&v=.*) #or versa verse - feel free to use better matching 
)     #for ids like "pFS4zYWxzNA" 
(&.*)*$    #all other kinds of parameter 

編輯: 我提高了匹配

^http:\/\/(?:www\.)?youtube\.com\/watch\? 
(?:&.*)*       #extra params at the beginning 
(
    (?: 
     v=([a-zA-Z0-9_\-]{11})  #propper mathing for id 
     (?:&.*)*    #extras 
     &list=([a-zA-Z0-9_\-]{18}) #list 
    ) 
    | 
    (?: 
     list=([a-zA-Z0-9_\-]{18}) 
     (?:&.*)*    #versa 
     &v=([a-zA-Z0-9_\-]{11}) 
    ) 
) 
(?:&.*)*       #extras at the end 
(?:\#.*)*$      #anchors 
+0

是,此正則表達式的作品。但是,最後一個捕獲組將始終爲空,因爲每個替代選項末尾的'。*'匹配到字符串末尾的所有內容。另外,點的使用是不合適的,因爲它匹配任何URL中無效的空白。爲了改善這一點,我會用所有的星號代替:'[^&\ s] *'否則,工作很好。 – ridgerunner 2011-03-13 20:14:40

+0

@ridgerunner:我確實試圖改變。*成爲[^&\ s] *,但它不起作用。我將它改成這個'/^http:\/\ /(?: www \。)。 ?的YouTube \ .COM \ /觀看\((v = [^&\ S] *&列表= [^&\ S] *)|(列表= [^&\ S] * v = [^&\ s]的*))(&[^&\ s] *)* $ /' – junxiong 2011-03-14 04:26:29

+0

@ridgerunner:我添加了最後一個組來處理像'&feature = list_related&playnext = 1'這樣的額外參數,也請參閱編輯 – Valerij 2011-03-14 13:58:59

7

我結束了類似,但不同的東西:

/^.*(youtu.be\/|list=)([^#\&\?]*).*/ 

工作對下列網址:

鑑於後續代碼:

 var regExp = /^.*(youtu.be\/|list=)([^#\&\?]*).*/; 
     var match = url.match(regExp); 
     if (match && match[2]){ 
      return match[2]; 
     } 
     return null; 

我的回報是PLBOh8f9FoHHjOz0vGrD20WcTtJar-LOrw