使用JavaScript解析Vimeo ID?

使用JavaScript解析Vimeo ID?,javascript,vimeo,Javascript,Vimeo,如何在JavaScript中解析Vimeo URL中的ID URL将由用户输入,因此我需要检查他们是否以正确的格式输入 我需要ID,以便使用他们的简单API检索视频数据。当然 您应该首先使用正则表达式检查URL的有效性/健全性,并确保它与您期望的模式匹配。(更多关于) 接下来你需要那个身份证号码,对吗?假设它位于URL中,您也可以使用正则表达式()提取它 基本上都是字符串和正则表达式处理。如果您想先检查Vimeo URL: function getVimeoId( url ) { // L

如何在JavaScript中解析Vimeo URL中的ID

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

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

当然

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

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


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

如果您想先检查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];
  }
}
例如

返回

11918221

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");
}
这适用于遵循以下模式的所有有效Vimeo URL:

http://vimeo.com/*

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


http://vimeo.com/groups/*/视频/*

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

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"));
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");
}

我的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的我的typescript解决方案:

  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;
  }

如果您只对Vimeo URL进行解析(如
https://vimeo.com/407943692
您不需要正则表达式。这是更简单的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
}
资料来源:


在许多情况下,这会失败,主要与Javascript导航有关。以下是一些:当时的答案是正确的,因为vimeo没有使用这种导航。当然,更简单(也更简单)的方法是使用
/\d+/
作为表达式。。
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
}