使用Regex验证Youtube播放列表网址

时间:2011-03-13 11:01:01

标签: regex url

如何使用正则表达式验证YouTube 播放列表网址? 我找到了从其他问题验证视频的答案。
/^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?$/

但我无法验证这样的网址:
http://www.youtube.com/watch?list=PL1F9CA2A03CF286C2&v=pFS4zYWxzNA&

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

2 个答案:

答案 0 :(得分:8)

我最终得到了类似但不同的东西:

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

针对以下网址:

给出以下代码:

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

我的回报是PLBOh8f9FoHHjOz0vGrD20WcTtJar-LOrw

答案 1 :(得分: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