使用正则表达式验证YouTube播放列表URL
问题描述:
如何验证一个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&
答
试这
^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
答
我结束了类似,但不同的东西:
/^.*(youtu.be\/|list=)([^#\&\?]*).*/
工作对下列网址:
- https://www.youtube.com/watch?v=4jduuQh-Uho&list=PLBOh8f9FoHHjOz0vGrD20WcTtJar-LOrw&index=3
- https://www.youtube.com/playlist?list=PLBOh8f9FoHHjOz0vGrD20WcTtJar-LOrw
鉴于后续代码:
var regExp = /^.*(youtu.be\/|list=)([^#\&\?]*).*/;
var match = url.match(regExp);
if (match && match[2]){
return match[2];
}
return null;
我的回报是PLBOh8f9FoHHjOz0vGrD20WcTtJar-LOrw
是,此正则表达式的作品。但是,最后一个捕获组将始终为空,因为每个替代选项末尾的'。*'匹配到字符串末尾的所有内容。另外,点的使用是不合适的,因为它匹配任何URL中无效的空白。为了改善这一点,我会用所有的星号代替:'[^&\ s] *'否则,工作很好。 – ridgerunner 2011-03-13 20:14:40
@ridgerunner:我确实试图改变。*成为[^&\ s] *,但它不起作用。我将它改成这个'/^http:\/\ /(?: www \。)。 ?的YouTube \ .COM \ /观看\((v = [^&\ S] *&列表= [^&\ S] *)|(列表= [^&\ S] * v = [^&\ s]的*))(&[^&\ s] *)* $ /' – junxiong 2011-03-14 04:26:29
@ridgerunner:我添加了最后一个组来处理像'&feature = list_related&playnext = 1'这样的额外参数,也请参阅编辑 – Valerij 2011-03-14 13:58:59