2011-03-13 49 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