使用 JavaScript 解析 Vimeo ID?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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");

【讨论】:

在很多情况下会失败,主要与 Javascript 导航有关。以下是一些:vimeo.com/channels/167691#15316243vimeo.com/m/#/featured/19403316 当时的答案是正确的,因为 vimeo 没有使用那种导航。更简单(也更天真)的方法当然是使用/\d+/ 作为表达式..【参考方案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://***.com/a/65845916/3850405

【讨论】:

以上是关于使用 JavaScript 解析 Vimeo ID?的主要内容,如果未能解决你的问题,请参考以下文章

Vimeo - 通过 javascript api 发送密码

Vimeo API v3:请求通过视频 ID 获取多个视频

javascript Vimeo控制视频

Vimeo 嵌入完成时显示元素

用于管理 vimeo *和* youtube 视频播放列表的 Javascript 播放器?

C# 正则表达式通过 url 从 youtube 和 vimeo 获取视频 ID