【问题标题】:Get video id from Vimeo url从 Vimeo url 获取视频 ID
【发布时间】:2012-10-28 12:23:31
【问题描述】:

我正在尝试找到最佳的正则表达式来从 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

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

/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/

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

【问题讨论】:

  • 你可以使用url.split('/').slice(-1)[0].split('?')[0],还是需要正则表达式?

标签: javascript regex vimeo


【解决方案1】:

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


所以这里有一个 API 解决方案: (没有正则表达式但 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;
}

缩小:

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}

纯/原生 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;
}

缩小:

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}

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

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

【讨论】:

    【解决方案2】:

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

    请参阅@l2aelba 对 API 解决方案的回答 https://stackoverflow.com/a/37695721/622813


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

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

    您现在可以检索捕获组1(如果存在)中的组名、捕获组2(如果存在)中的专辑ID和捕获组3(总是)中的视频ID。

    Demo

    【讨论】:

    • 一些错误? Line 1: vimeo_Reg = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/|groups\/[^\/]*\/videos\/|album\/\d+\/video\/|)(\d+)($|\/|?)/; --- Unescaped '?'.
    • @l2aelba 抱歉,复制粘贴错误。将我的答案中的代码复制到演示中。
    • 你能编辑你的演示链接到jsbin.com/asuqic/11/edit?javascript,live吗?我认为你的回答会被接受:D
    • @l2aelba 然后我想我的答案又出现了错误的链接:D ...无论如何,现在一切都解决了;)
    【解决方案3】:

    对于 php,以下代码适用于以下网址

    即:

    http://vimeo.com/88888888
    http://player.vimeo.com/video/88888888
    http://vimeo.com/channels/staffpicks/88888888
    http://vimeo.com/groups/groupsname/88888888
    

    PHP 代码:

        $vimeoUrl = 'http://vimeo.com/channels/channelsName/11111111';
        $fetchVimeoIdArr = explode('/', $vimeoUrl);
        $idCounter = count($fetchVimeoIdArr) - 1;
        $vimeoId = $fetchVimeoIdArr[$idCounter];
    

    【讨论】:

    • 它将返回:11111111?param=test
    【解决方案4】:

    以下正则表达式将为只想检索此信息的人返回组 1 上的 id。它适用于问题中给出的所有示例 URL。 它也可以在没有http://https:// 的情况下工作。 它也适用于像player.vimeo.com/...这样的URL

    /^.*(?:vimeo.com)\\/(?:channels\\/|groups\\/[^\\/]*\\/videos\\/|album\\/\\d+\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/
    

    【讨论】:

    • 这里是未转义的版本+添加了对vimeo.com/channels/channelname/1111111111的支持:/^.*(?:vimeo.com)\/(?:channels\/|channels\/\w+\/|groups\/[^\/]*\/videos\/|album\/\d+\/video\/|video\/|)(\d+)(?:$|\/|\?)/
    【解决方案5】:
    var r = /(videos|video|channels|\.com)\/([\d]+)/,
        a = "https://vimeo.com/album/2222222/video/11111111";
    
    console.log(a.match(r)[2]); // 11111111;
    

    http://jsbin.com/asuqic/7/edit

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多