用于提取Youtube视频ID的Javascript正则表达式

时间:2011-04-19 10:07:31

标签: javascript jquery regex youtube extraction

以下代码用于获取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";
}

4 个答案:

答案 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