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

Jam*_* P. 2 javascript regex youtube jquery 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";
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 5

"[\\?&]v=([^&#]*)"
Run Code Online (Sandbox Code Playgroud)

解释(从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.
Run Code Online (Sandbox Code Playgroud)

第二个正则表达式[^http://youtu.be/](.*)[^?hd=1]非常错误.

它可能应该阅读

"^http://youtu.be/(.*)(?=hd=1)"
Run Code Online (Sandbox Code Playgroud)