以下代码用于获取Youtube视频ID以获取缩略图。
第一个正则表达式背后的原因是什么?它究竟做了什么?它似乎至少返回了两个结果。还可以将两者结合起来吗?
else if(url.match("youtube.com/")){
var vid;
var results;
//http://www.youtube.com/watch?v=GItD10Joaa0
results = url.match("[\\?&]v=([^&#]*)");
vid = ( results === null ) ? url : results[1];
return "http://img.youtube.com/vi/"+vid+"/2.jpg";
} else if( url.match("youtu.be/") ) {
var vid;
var results;
// http://youtu.be/5uxd-521uus?hd=1
// results = url.match("[^http://youtu.be/](.*)[^?hd=1]");
// Corrected
results = url.match(""^http://youtu.be/(.*)(?=hd=1)");
//alert(results[0]);
vid = ( results === null ) ? url : results[0];
return "http://img.youtube.com/vi/"+vid+"/2.jpg";
}
答案 0 :(得分:5)
"[\\?&]v=([^&#]*)"
解释(从JavaScript字符串缩减为正则表达式后):
[\?&] # Match a ? or a & (the backslash is unnecessary here!)
v= # Match the literal text "v="
( # Capture the following into backreference no. 1:
[^&#]* # Zero or more characters except & or #
) # End of capturing group.
第二个正则表达式[^http://youtu.be/](.*)[^?hd=1]
非常错误。
可能应该阅读
"^http://youtu.be/(.*)(?=hd=1)"
答案 1 :(得分:1)
如果你指的是......
results = url.match("[\\?&]v=([^&#]*)");
然后它匹配文字\
,?
或&
后跟文字v=
,后跟捕获组,该组捕获0个或更多任何字符不是&
或#
。
答案 2 :(得分:1)
当网址类似于“youtube.com/”时,第一个正则表达式正在检查“?v = GItD10Joaa0” 当网址为“http://www.youtube.com/index?feature=youtu.be”时,第二个检查“www.youtube.com/index?feature=youtu.be”
所以你可以简单地使用第一个正则表达式,如果你想从第一个网址获取ID,同样如下:)
答案 3 :(得分:1)
好的,我做了一些钓鱼,并遇到了这个正则表达式。它应该适合上述目的。
youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)
来自:C# regex to get video id from youtube and vimeo by url
并且:http://forrst.com/posts/Automatic_YouTube_Thumbnails_with_PHP_and_Regex-uta