从Vimeo网址获取视频ID

l2a*_*lba 28 javascript regex vimeo

我正在尝试找到最好的正则表达式来从URL获取vimeo视频ID.

示例网址:

https://vimeo.com/11111111
http://vimeo.com/11111111
https://www.vimeo.com/11111111
http://www.vimeo.com/11111111
https://vimeo.com/channels/11111111
http://vimeo.com/channels/11111111
https://vimeo.com/groups/name/videos/11111111
http://vimeo.com/groups/name/videos/11111111
https://vimeo.com/album/2222222/video/11111111
http://vimeo.com/album/2222222/video/11111111
https://vimeo.com/11111111?param=test
http://vimeo.com/11111111?param=test
Run Code Online (Sandbox Code Playgroud)

我当前的正则表达式不起作用:

/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
Run Code Online (Sandbox Code Playgroud)

游乐场和测试在这里: http ://jsbin.com/asuqic/1/edit?javascript,live

Mar*_*der 38

更新:我注意到这个答案时不时得到一些关注(通过投票或评论).答案已超过两年,支持的URL类型可能不再是最新的.我不会积极维护这个正则表达式 - 它只是作为问题的答案,因此只关注那里列出的格式.使用此风险需要您自担风险,或者 - 甚至更好 - 仅将其用作基于最新且全面的URL格式列表开发自己的正则表达式的起点.

请参阅@ l2aelba的API解决方案答案/sf/answers/2638700501/


这将是完整的正则表达式,这也确保格式正确:

/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/
Run Code Online (Sandbox Code Playgroud)

您现在可以检索捕获组中的组名称1(如果存在),捕获组中的相册ID 2(如果存在)和捕获组中的视频ID 3(始终).

演示


l2a*_*lba 10

自2016年以来.和@Martin Enderno longer up to date


所以这是一个API解决方案:( 没有regexp但API调用者和安全!)

jQuery:

function GetVimeoIDbyUrl(url) {
  var id = false;
  $.ajax({
    url: 'https://vimeo.com/api/oembed.json?url='+url,
    async: false,
    success: function(response) {
      if(response.video_id) {
        id = response.video_id;
      }
    }
  });
  return id;
}
Run Code Online (Sandbox Code Playgroud)

缩小:

function GetVimeoIDbyUrl(e){var i=!1;return $.ajax({url:"https://vimeo.com/api/oembed.json?url="+e,async:!1,success:function(e){e.video_id&&(i=e.video_id)}}),i}
Run Code Online (Sandbox Code Playgroud)

Pure/Native JS: (IE9 +和现代浏览器)

function GetVimeoIDbyUrl(url) {
  var id = false;
  var request = new XMLHttpRequest();
  request.open('GET', 'https://vimeo.com/api/oembed.json?url='+url , false);
  request.onload = function() {
    if (request.status >= 200 && request.status < 400) {
      var response = JSON.parse(request.responseText);
      if(response.video_id) {
        id = response.video_id;
      }
    }
  };
  request.send();
  return id;
}
Run Code Online (Sandbox Code Playgroud)

缩小:

function GetVimeoIDbyUrl(e){var t=!1,o=new XMLHttpRequest;return o.open("GET","https://vimeo.com/api/oembed.json?url="+e,!1),o.onload=function(){if(o.status>=200&&o.status<400){var e=JSON.parse(o.responseText);e.video_id&&(t=e.video_id)}},o.send(),t}
Run Code Online (Sandbox Code Playgroud)

演示: https ://jsbin.com/mevejoxudo/1/edit?js,output

某些类型的网址不支持?: https ://vimeo.com/help/contact#tech-api (告诉他们,别告诉我呵呵:D)