首页 文章

如何从网址获取YouTube视频ID?

提问于
浏览
198

我希望通过JavaScript(没有jQuery,纯JavaScript)从YouTube的URL获取 v=id .

YouTube网址格式示例

http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW

http://www.youtube.com/watch?v=u8nQa1cJyX8

或者在网址中包含视频ID的任何其他YouTube格式 .

来自这些格式的结果

u8nQa1cJyX8

30 回答

  • 1

    多一个:

    var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2]
    

    它适用于此线程中显示的任何URL .

    当YouTube添加一些包含11个base64字符的其他参数时,它将无法使用 . 直到那时这是简单的方法 .

  • 2

    正如_993242中提到的webstrap:

    如果视频以“v”开头并且来自youtu.be正常工作正则表达式包含一个小错误\ ?? v?=?这应该只是在 Watch 部分,否则如果id以'v'开头,你会过滤'v' . 所以这应该做的伎俩/^.*((youtu.be/)|(v/)|(/u/\w/)|(embed/)|(watch???? =?))([^#\&\?] *) . * /

  • 4

    您不需要使用正则表达式 .

    var video_id = window.location.search.split('v=')[1];
    var ampersandPosition = video_id.indexOf('&');
    if(ampersandPosition != -1) {
      video_id = video_id.substring(0, ampersandPosition);
    }
    
  • 21

    我对“jeffreypriebe”提供的正则表达式进行了改进,因为他需要一种YouTube网址,即视频通过 Channels 时的网址 .

    不,但这是我武装的功能 .

    <script type="text/javascript">
    function youtube_parser(url){
        var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
        var match = url.match(regExp);
        return (match&&match[7].length==11)? match[7] : false;
    }
    </script>
    

    These are the types of URLs supported

    http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
    http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
    http://www.youtube.com/v/0zM3nApSvMg?fs=1&amp;hl=en_US&amp;rel=0
    http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
    http://www.youtube.com/embed/0zM3nApSvMg?rel=0
    http://www.youtube.com/watch?v=0zM3nApSvMg
    http://youtu.be/0zM3nApSvMg
    

    可以在[http://web.archive.org/web/20160926134334/] http://lasnv.net/foro/839/Javascript_parsear_URL_de_YouTube找到

  • 0

    我简化了Lasnv的回答 .

    它还修复了WebDeb描述的错误 .

    这里是:

    var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
    var match = url.match(regExp);
    if (match && match[2].length == 11) {
      return match[2];
    } else {
      //error
    }
    

    这是一个正在使用的regexer链接:http://regexr.com/3dnqv

  • 0

    截至2015年1月1日,这些都没有在厨房水槽上工作,特别是没有protocal http / s和youtube-nocookie域的URL . 所以这是一个适用于所有这些不同Youtube版本的修改版本:

    // Just the regex. Output is in [1].
    /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/
    
    // For testing.
    var urls = [
        '//www.youtube-nocookie.com/embed/up_lNV-yoK4?rel=0',
        'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo',
        'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
        'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
        'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
        'http://www.youtube.com/user/SilkRoadTheatre#p/a/u/2/6dwqZw0j_jY',
        'http://youtu.be/6dwqZw0j_jY',
        'http://www.youtube.com/watch?v=6dwqZw0j_jY&feature=youtu.be',
        'http://youtu.be/afa-5HQHiAs',
        'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo?rel=0',
        'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
        'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
        'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
        'http://www.youtube.com/embed/nas1rJpm7wY?rel=0',
        'http://www.youtube.com/watch?v=peFZbP64dsU',
        'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player',
        'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player',
        'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
        'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
        'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
        'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
        'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
        'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player'
    ];
    
    var i, r, rx = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/;
    
    for (i = 0; i < urls.length; ++i) {
        r = urls[i].match(rx);
        console.log(r[1]);
    }
    
  • 75

    在这里比赛的最后阶段,但我已经从mantish和j-w中剔除了两个出色的回应 . 一,修改后的正则表达式:

    const youtube_regex = /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/
    

    这是测试代码(我已将mantish的原始测试用例添加到j-w的更糟糕的测试用例中):

    var urls = [
          'http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index',
          'http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o',
          'http://www.youtube.com/v/0zM3nApSvMg?fs=1&amp;hl=en_US&amp;rel=0',
          'http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s',
          'http://www.youtube.com/embed/0zM3nApSvMg?rel=0',
          'http://www.youtube.com/watch?v=0zM3nApSvMg',
          'http://youtu.be/0zM3nApSvMg',
          '//www.youtube-nocookie.com/embed/up_lNV-yoK4?rel=0',
          'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo',
          'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
          'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
          'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
          'http://www.youtube.com/user/SilkRoadTheatre#p/a/u/2/6dwqZw0j_jY',
          'http://youtu.be/6dwqZw0j_jY',
          'http://www.youtube.com/watch?v=6dwqZw0j_jY&feature=youtu.be',
          'http://youtu.be/afa-5HQHiAs',
          'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo?rel=0',
          'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
          'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
          'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
          'http://www.youtube.com/embed/nas1rJpm7wY?rel=0',
          'http://www.youtube.com/watch?v=peFZbP64dsU',
          'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player',
          'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player',
          'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
          'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
          'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
          'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
          'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
          'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player'
      ];
    
      var failures = 0;
      urls.forEach(url => {
        const parsed = url.match(youtube_regex);
        if (parsed && parsed[2]) {
          console.log(parsed[2]);
        } else {
          failures++;
          console.error(url, parsed);
        }
      });
      if (failures) {
        console.error(failures, 'failed');
      }
    
  • 0
    /^.*(youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).*/
    

    测试:

    • http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=zh_CN&rel=0

    • http://www.youtube.com/embed/0zM3nApSvMg?rel=0

    • http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index

    • http://www.youtube.com/watch?v=0zM3nApSvMg

    • http://youtu.be/0zM3nApSvMg

    • http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s

    • http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/KdwsulMb8EQ

    • http://youtu.be/dQw4w9WgXcQ

    • http://www.youtube.com/embed/dQw4w9WgXcQ

    • http://www.youtube.com/v/dQw4w9WgXcQ

    • http://www.youtube.com/e/dQw4w9WgXcQ

    • http://www.youtube.com/watch?v=dQw4w9WgXcQ

    • http://www.youtube.com/?v=dQw4w9WgXcQ

    • http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ

    • http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ

    • http://www.youtube.com/user/IngridMichaelsonVEVO#p/u/11/KdwsulMb8EQ

    • http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0

    受到this other answer的启发 .

  • 17

    我创建了一个函数,用于测试Youtube,Soundcloud或Vimeo嵌入ID的用户输入,以便能够使用嵌入式媒体创建更连续的设计 . 此函数检测并返回具有两个属性的对象:“type”和“id” . 类型可以是“youtube”,“vimeo”或“soundcloud”,“id”属性是唯一的媒体ID .

    在网站上我使用textarea转储,用户可以粘贴任何类型的链接或嵌入代码,包括vimeo和youtube的iFrame嵌入 .

    function testUrlForMedia(pastedData) {
    var success = false;
    var media   = {};
    if (pastedData.match('http://(www.)?youtube|youtu\.be')) {
        if (pastedData.match('embed')) { youtube_id = pastedData.split(/embed\//)[1].split('"')[0]; }
        else { youtube_id = pastedData.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0]; }
        media.type  = "youtube";
        media.id    = youtube_id;
        success = true;
    }
    else if (pastedData.match('http://(player.)?vimeo\.com')) {
        vimeo_id = pastedData.split(/video\/|http:\/\/vimeo\.com\//)[1].split(/[?&]/)[0];
        media.type  = "vimeo";
        media.id    = vimeo_id;
        success = true;
    }
    else if (pastedData.match('http://player\.soundcloud\.com')) {
        soundcloud_url = unescape(pastedData.split(/value="/)[1].split(/["]/)[0]);
        soundcloud_id = soundcloud_url.split(/tracks\//)[1].split(/[&"]/)[0];
        media.type  = "soundcloud";
        media.id    = soundcloud_id;
        success = true;
    }
    if (success) { return media; }
    else { alert("No valid media id detected"); }
    return false;
    }
    
  • 0

    鉴于YouTube有各种URL样式,我认为Regex是一个更好的解决方案 . 这是我的正则表达式:

    ^.*(youtu.be\/|v\/|embed\/|watch\?|youtube.com\/user\/[^#]*#([^\/]*?\/)*)\??v?=?([^#\&\?]*).*
    

    第3组拥有您的YouTube ID

    YouTube网址示例(目前包括“旧版嵌入网址样式”) - 上述正则表达式适用于所有这些网址:

    http://www.youtube.com/v/0zM3nApSvMg?fs=1&amp;hl=en_US&amp;rel=0
    http://www.youtube.com/embed/0zM3nApSvMg?rel=0
    http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
    http://www.youtube.com/watch?v=0zM3nApSvMg
    http://youtu.be/0zM3nApSvMg
    http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
    http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
    

    帽子小费到Lasnv

  • 15

    Java代码:(适用于所有URL:

    String url = "http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index";
    
        String regExp = "/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";
        Pattern compiledPattern = Pattern.compile(regExp);
        Matcher matcher = compiledPattern.matcher(url);
        if(matcher.find()){
            int start = matcher.end();
            System.out.println("ID : " + url.substring(start, start+11));
    
        }
    

    对于DailyMotion:

    String url = "http://www.dailymotion.com/video/x4xvnz_the-funny-crash-compilation_fun";
    
        String regExp = "/video/([^_]+)/?";
        Pattern compiledPattern = Pattern.compile(regExp);
        Matcher matcher = compiledPattern.matcher(url);
        if(matcher.find()){
            String match = matcher.group();
            System.out.println("ID : " + match.substring(match.lastIndexOf("/")+1));
    
        }
    
  • 1

    由于YouTube视频ID设置为11 characters,因此我们在使用 v= 拆分网址后只需 substring . 然后我们最终不依赖于&符号 .

    var sampleUrl = "http://www.youtube.com/watch?v=JcjoGn6FLwI&asdasd";
    
    var video_id = sampleUrl.split("v=")[1].substring(0, 11)
    

    好又简单:)

  • 0

    我总结了所有的建议,这是对这个问题的普遍和简短的回答:

    if(url.match('http://(www.)?youtube|youtu\.be')){
        youtube_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
    }
    
  • 0

    稍微严格的版本:

    ^https?://(?:www\.)?youtu(?:\.be|be\.com)/(?:\S+/)?(?:[^\s/]*(?:\?|&)vi?=)?([^#?&]+)
    

    测试:

    http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs
    https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b
    http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be
    https://youtu.be/oTJRivZTMLs
    http://youtu.be/oTJRivZTMLs&feature=channel
    http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs
    http://www.youtube.com/embed/oTJRivZTMLs?rel=0
    http://youtube.com/v/oTJRivZTMLs&feature=channel
    http://youtube.com/v/oTJRivZTMLs&feature=channel
    http://youtube.com/vi/oTJRivZTMLs&feature=channel
    http://youtube.com/?v=oTJRivZTMLs&feature=channel
    http://youtube.com/?feature=channel&v=oTJRivZTMLs
    http://youtube.com/?vi=oTJRivZTMLs&feature=channel
    http://youtube.com/watch?v=oTJRivZTMLs&feature=channel
    http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel
    
  • 4

    一个mantish发布的略有变化的版本:

    var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]{11,11}).*/;
    var match = url.match(regExp);
    if (match) if (match.length >= 2) return match[2];
    // error
    

    这假设代码总是11个字符 . 我在ActionScript中使用它,不确定Javascript中是否支持{11,11} . 还添加了对&v = ....的支持(以防万一)

  • 89

    tl;博士 .

    匹配此问题上的所有URL示例,然后匹配一些 .

    let re = /^(https?:\/\/)?((www\.)?(youtube(-nocookie)?|youtube.googleapis)\.com.*(v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/)|youtu\.be\/)([_0-9a-z-]+)/i;
    let id = "https://www.youtube.com/watch?v=l-gQLqv9f4o".match(re)[7];
    

    ID将始终位于匹配组7中 .

    我从这个问题的答案中抓取的所有网址的实例:https://regexr.com/3u0d4

    完整说明:

    随着许多答案/评论的提出,youtube视频网址有很多格式 . 即使是多个顶级域名,他们也可以“托管” .

    您可以按照上面的regexr链接查看我检查过的完整变体列表 .

    让我们分解RegExp .

    ^ 将字符串锁定到字符串的开头 . (https?:\/\/)? 可选协议http://或https:// ? 使前面的项目可选,因此 s 然后整个组(包含在一组中的任何内容)括号)是可选的 .

    好的,下一部分就是它的核心 . 基本上我们有两个选项,各种版本的www.youtube.com/... [id]和链接缩短了youtu.be/[id]版本 .

    (                                                  // Start a group which will match everything after the protocol and up to just before the video id.
      (www\.)?                                         // Optional www.
      (youtube(-nocookie)?|youtube.googleapis)         // There are three domains where youtube videos can be accessed. This matches them.
      \.com                                            // The .com at the end of the domain. 
      .*                                               // Match anything 
      (v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/) // These are all the things that can come right before the video id. The | character means OR so the first one in the "list" matches.
      |                                                // There is one more domain where you can get to youtube, it's the link shortening url which is just followed by the video id. This OR separates all the stuff in this group and the link shortening url.
      youtu\.be\/                                      // The link shortening domain
    )                                                  // End of group
    

    最后,我们让小组选择视频ID . 至少一个字符是数字,字母,下划线或短划线 .

    ([_0-9a-z-]+)
    

    通过指向regexr链接并查看表达式的每个部分如何与url中的文本匹配,您可以找到有关正则表达式每个部分的更多详细信息 .

  • 332

    我喜欢苏里亚的回答..只是一个不起作用的案例......

    String regExp = "/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";
    

    不起作用

    youtu.be/i4fjHzCXg6c  and  www.youtu.be/i4fjHzCXg6c
    

    updated version:

    String regExp = "/?.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";
    

    适合所有人 .

  • 2

    试试这个 -

    function getYouTubeIdFromURL($url) 
    {
      $pattern = '/(?:youtube.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})/i';
      preg_match($pattern, $url, $matches);
    
      return isset($matches[1]) ? $matches[1] : false;
    }
    
  • 0

    Chris Nolet清洁Lasnv答案的例子非常好,但我最近发现,如果你试图在文本中找到你的youtube链接并在youtube网址后放一些随机文本,regexp匹配的方式超过了需要 . 改进的Chris Nolet回答:

    /^.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]{11,11}).*/
    
  • 1
    function parser(url){
        var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\/)|(\?v=|\&v=))([^#\&\?]*).*/;
        var match = url.match(regExp);
        if (match && match[8].length==11){
                alert('OK');
        }else{
                alert('BAD');
        }
    }
    

    用于检测:

    https://www.youtube.com/embed/vDoO_bNw7fc - attention first symbol «v» in «vDoO_bNw7fc»
    
    http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs
    https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b
    http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be
    https://youtu.be/oTJRivZTMLs
    http://youtu.be/oTJRivZTMLs&feature=channel
    http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs
    http://www.youtube.com/embed/oTJRivZTMLs?rel=0
    http://youtube.com/v/oTJRivZTMLs&feature=channel
    http://youtube.com/v/oTJRivZTMLs&feature=channel
    http://youtube.com/vi/oTJRivZTMLs&feature=channel
    http://youtube.com/?v=oTJRivZTMLs&feature=channel
    http://youtube.com/?feature=channel&v=oTJRivZTMLs
    http://youtube.com/?vi=oTJRivZTMLs&feature=channel
    http://youtube.com/watch?v=oTJRivZTMLs&feature=channel
    http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel
    
  • 0

    这肯定需要正则表达式:

    复制到Ruby IRB:

    var url = "http://www.youtube.com/watch?v=NLqASIXrVbY"
    var VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
    url.match(VID_REGEX)[1]
    

    查看所有测试用例:https://gist.github.com/blairanderson/b264a15a8faaac9c6318

  • 4

    好吧,通过简单的解析来实现它的方法是:将第一个 = 符号后的所有内容都添加到第一个 & 符号 .

    我认为他们在这里有一个类似的答案:

    Parsing a Vimeo ID using JavaScript?

  • 229

    我们知道这些字符"?v="永远不会出现超过1但'v'可能会以某种方式出现在Id本身中,所以我们使用"?v="作为分隔符 . 看到它Working Here

    //Get YouTube video Id From Its Url
    
         $('button').bind('click',function(){
    var 
    url='http://www.youtube.com/watch?v=u8nQa1cJyX8',
    videoId = url.split('?v='),//Split data to two
    YouTubeVideoId=videoId[1];
    alert(YouTubeVideoId);return false;
    
    });
    
    <button>Click ToGet VideoId</button>
    
  • 5

    如果你有完整的URL,简单的正则表达式,保持简单 .

    results = url.match("v=([a-zA-Z0-9]+)&?")
    videoId = results[1] // watch you need.
    
  • 4
    var video_url = document.getElementById('youtubediv').value;
            if(video_url!=""){
            ytid(video_url);
            document.getElementById("youtube").setAttribute("src","http://www.youtube.com/embed/"+ytid(video_url));
            }
            function ytid(video_url){
                var video_id = video_url.split('v=')[1];
                var ampersandPosition = video_id.indexOf('&');
                if(ampersandPosition != -1) {
                    video_id = video_id.substring(0, ampersandPosition);
                }
                return video_id;
            }
    

    我希望它可以提供帮助

  • 0
    function youtube_parser(url){
        var match = url.match(/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/);
        return (match&&match[7].length==11)?match[7]:false;
    }
    

    最短,最有效率

  • 1

    我对mantish's regex进行了一些细微的修改,以包含来自J W'smatx's答案的所有测试用例;因为它最初并不适用于所有这些 . 可能需要进一步的更改,但据我所知,至少涵盖了大多数链接:

    /(?:[?&]vi?=|\/embed\/|\/\d\d?\/|\/vi?\/|https?:\/\/(?:www\.)?youtu\.be\/)([^&\n?#]+)/

    var url = ''; // get it from somewhere
    
    var youtubeRegExp = /(?:[?&]vi?=|\/embed\/|\/\d\d?\/|\/vi?\/|https?:\/\/(?:www\.)?youtu\.be\/)([^&\n?#]+)/;
    var match = url.match( youtubeRegExp );
    
    if( match && match[ 1 ].length == 11 ) {
        url = match[ 1 ];
    } else {
        // error
    }
    

    进一步测试:

    http://regexr.com/3fp84

  • 1

    在C#中,它看起来像这样:

    public static string GetYouTubeId(string url) {
        var regex = @"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?|watch)\/|.*[?&amp;]v=)|youtu\.be\/)([^""&amp;?\/ ]{11})";
    
        var match = Regex.Match(url, regex);
    
        if (match.Success)
        {
            return match.Groups[1].Value;
        }
    
        return url;
      }
    

    随意修改 .

  • 0

    我做了一个小功能,从Youtube网址中提取视频ID,如下所示 .

    var videoId = function(url) {
       var match = url.match(/v=([0-9a-z_-]{1,20})/i);
       return (match ? match['1'] : false);
    };
    
    console.log(videoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ'));
    console.log(videoId('https://www.youtube.com/watch?t=17s&v=dQw4w9WgXcQ'));
    console.log(videoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=17s'));
    

    即使网址中有多个参数,此函数也会提取视频ID .

  • 2

    您可以使用以下代码从网址获取YouTube视频ID:

    url = "https://www.youtube.com/watch?v=qeMFqkcPYcg"
    VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
    alert(url.match(VID_REGEX)[1]);
    

相关问题