【问题标题】:Parsing a Vimeo ID using JavaScript?使用 JavaScript 解析 Vimeo ID?
【发布时间】:2011-02-24 09:13:02
【问题描述】:

如何在 JavaScript 中从 Vimeo URL 解析 ID?

URL 将由用户输入,因此我需要检查他们输入的格式是否正确。

我需要 ID 以便我可以使用他们的简单 API 来检索视频数据。

【问题讨论】:

    标签: javascript vimeo


    【解决方案1】:
    regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/
    parseUrl = regExp.exec url
    return parseUrl[5]
    

    这适用于所有遵循以下模式的有效 Vimeo URL:

    http://vimeo.com/*

    http://vimeo.com/channels/*/*

    http://vimeo.com/groups/*/videos/*

    【讨论】:

      【解决方案2】:

      由于 Vimeo 视频的 URL 由 http://vimeo.com/ 后跟数字 id 组成,因此您可以执行以下操作

      var url = "http://www.vimeo.com/7058755";
      var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
      
      var match = url.match(regExp);
      
      if (match){
          alert("id: " + match[2]);
      }
      else{
          alert("not a vimeo url");
      }
      

      【讨论】:

      【解决方案3】:

      如果您想先检查 Vimeo URL:

      function getVimeoId( url ) {
      
        // Look for a string with 'vimeo', then whatever, then a
        // forward slash and a group of digits.
        var match = /vimeo.*\/(\d+)/i.exec( url );
      
        // If the match isn't null (i.e. it matched)
        if ( match ) {
          // The grouped/matched digits from the regex
          return match[1];
        }
      }
      

      例如

      getVimeoId('http://vimeo.com/11918221');
      

      返回

      11918221
      

      【讨论】:

        【解决方案4】:

        我认为 Matilda 的答案是最好的,但它是一个无效的代码草案,因此将它与 Sean Kinsey 的答案合并,我们得到这个工作代码版本:

        var url = "http://www.vimeo.com/7058755"; //Or any other Vimeo url format
        var regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/;
        
        var match = url.match(regExp);
        
        if (match){
            alert("id: " + match[5]);
        }else{
            alert("not a vimeo url");
        }
        

        【讨论】:

          【解决方案5】:

          当然。

          您应该首先使用正则表达式检查 URL 的有效性/完整性,并确保它与您期望的模式匹配。 (更多关于regex'es here

          接下来你需要那个 ID 号,对吗?假设它位于 URL 中,您也可以使用正则表达式 (backreference) 来提取它

          基本上都是字符串和正则表达式处理。

          【讨论】:

            【解决方案6】:
            function getVimeoId(url) {
                var m = url.match(/^.+vimeo.com\/(.*\/)?([^#\?]*)/);
                return m ? m[2] || m[1] : null;
            }
            
            console.log(getVimeoId("http://vimeo.com/54178821"));
            console.log(getVimeoId("http://vimeo.com/channels/nudiecutie/57383513"));
            

            【讨论】:

              【解决方案7】:
              var Vimeo =
              {
                  get_video_id: function(url)
                  {
                      var regExp = /http(s)?:\/\/(www\.)?vimeo.com\/(\d+)(\/)?(#.*)?/
              
                      var match = url.match(regExp)
              
                      if (match)
                          return match[3]
                  },
              
                  get_video_url: function(id)
                  {
                      return 'https://vimeo.com/' + id
                  }
              }
              

              【讨论】:

                【解决方案8】:

                我的 Javascript 解决方案:

                function vimeo_parser(url){
                    // var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
                    var regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/;
                    var match = url.match(regExp);
                    return (match&&match[5])? match[5] : false;
                  }
                

                我的 Angular 8 打字稿解决方案:

                  vimeo_parser(url){
                    // var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
                    var regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/;
                    var match = url.match(regExp);
                    return (match&&match[5])? match[5] : false;
                  }
                

                【讨论】:

                  【解决方案9】:

                  如果您可以只解析像https://vimeo.com/407943692 这样的 Vimeo URL,则不需要正则表达式。这是更简单的imao:

                  let vimeoLink = "https://vimeo.com/407943692";
                  let url = new URL(vimeoLink);
                  //Remove leading /
                  let videoId = url.pathname.substring(1);
                  

                  但是,用户经常会找到指向其他格式的链接,例如:

                  http://vimeo.com/423630
                  https://vimeo.com/1399176
                  http://vimeo.com/423630087
                  https://vimeo.com/423630087
                  https://player.vimeo.com/video/423630087
                  https://player.vimeo.com/video/423630087?title=0&byline=0&portrait=0
                  https://vimeo.com/channels/staffpicks/423630087
                  https://vimeo.com/showcase/7008490/video/407943692
                  

                  这是我发现的所有案例的解决方案:

                  let regEx = /(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*/;
                  let match = mediaVideoLink.match(regEx);
                  if (match && match.length == 7) {
                      let videoId = match[6];
                  }
                  else {
                      //Handle error
                  }
                  

                  来源:

                  https://stackoverflow.com/a/65845916/3850405

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-17
                    • 2016-02-04
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-17
                    相关资源
                    最近更新 更多