【问题标题】:Splitting youtube video url拆分 youtube 视频网址
【发布时间】:2015-05-29 06:11:59
【问题描述】:

我需要从 youtube 视频网址获取 ID。我正在使用拆分方法但在控制台中它给出了以下错误

未捕获的类型错误:无法读取未定义的属性“拆分”

我的视频网址是: https://www.youtube.com/embed/juIJGBxj-4w

我的代码是

id = url.split('/')[1].split('embed')[1];

【问题讨论】:

  • id = url.split("/").filter(Boolean)[3] 会给你 id

标签: javascript jquery youtube


【解决方案1】:

正则表达式将从任何 YouTube 网址中提取视频 ID 它适用于缩短的 URL (youtu.be) 和嵌入 URL (youtube.com/embed/) 也是如此。

 function extractVideoID(url){
        var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
        var match = url.match(regExp);
        if ( match && match[7].length == 11 ){
            return match[7];
        }else{
            alert("Could not extract video ID.");
        }
    }

【讨论】:

  • 谢谢兄弟。但我也在和 vimeo 合作。你能不能给我两个。你可以在这里看到我想要的:jsfiddle.net/235xuwjn
【解决方案2】:

例如 youtube url 是 'https://www.youtube.com/watch?v=abcdefghij'

我会用下面的代码拆分它

id = url.split('?')[1].split('=')[1];

【讨论】:

  • 如何区分这两个 url 结构? https://www.youtube.com/embed/juIJGBxj-4whttps://www.youtube.com/watch?v=abcdefghij
  • @SumaiyaSalam 实际上是我在上面给出的网址。你可以看到有“?”和 '=' 在 youtube 网址中。
【解决方案3】:

问题比看起来更复杂,因为所有 Youtube URL 都不是以www.youtube.com/watch?v=..... 开头的,有些有www.youtu.be/...youtube.com/embed/... 之类的模式。

这是我使用的解析器,到目前为止,它每次都适用于任何 Youtube URL:

videoId = url.match(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i)[0]

【讨论】:

    【解决方案4】:

    假设id 总是在最后。

    function getId(url){
        var splitedValue = url.split("/");
        return splitedValue[splitedValue.length-1];
    }
    
    getId("https://www.youtube.com/embed/juIJGBxj-4w");
    

    Output: juIJGBxj-4w

    【讨论】:

      【解决方案5】:

      url = "https://www.youtube.com/embed/juIJGBxj-4w"
      id = url.split('/');
      var indexOfEmbed = id.indexOf("juIJGBxj-4w");
      id[indexOfEmbed]
      

      输出:


      "juIJGBxj-4w"

      此解决方案适用于所有使用正则表达式的网址:


      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]; // use console.log if your run code in browser console 
      } else {
        //error
      }
      

      这个解决方案适用于所有没有正则表达式的网址:

      对于这种类型的网址

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


       var url ="http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW"
      
       var video_id = window.location.search.split('v=')[1];// use url insted of window.location.search
      
      Or 
      
       var video_id = url.split('v=')[1];
          var ampersandPosition = video_id.indexOf('&');
          if(ampersandPosition != -1) {
            video_id = video_id.substring(0, ampersandPosition);
          }
      

      【讨论】:

      • 为什么id.indexOf("juIJGBxj-4w") 这个?不一样吗?如果我理解正确
      猜你喜欢
      • 2023-04-03
      • 2013-11-19
      • 2012-03-10
      • 2017-10-09
      • 2012-07-18
      • 2014-12-12
      • 1970-01-01
      • 2013-03-08
      • 2012-11-18
      相关资源
      最近更新 更多