我正在尝试找到最佳的正则表达式来从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
答案 0 :(得分:36)
更新:我注意到这个答案时不时地引起注意(通过投票或评论)。 答案已超过两年,支持的网址类型可能不再是最新的。我不会积极维护这个正则表达式 - 它只是作为问题的答案,因此只关注那里列出的格式。使用此风险需要您自担风险,或者 - 甚至更好 - 仅将其用作基于最新且全面的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中检索组名称(总是)。
答案 1 :(得分:9)
自2016年起。 @Martin Ender 表示no 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}
Pure / Native JS: (IE9 +& Modern browsers)
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
某些类型的网址不支持? : https://vimeo.com/help/contact#tech-api (告诉他们,别告诉我嘿嘿:D)
答案 2 :(得分:3)
var r = /(videos|video|channels|\.com)\/([\d]+)/,
a = "https://vimeo.com/album/2222222/video/11111111";
console.log(a.match(r)[2]); // 11111111;
答案 3 :(得分:3)
以下正则表达式将为仅想要检索此信息的用户返回组1的ID。它适用于问题中给出的所有示例URL。
它也适用于http://
和https://
。
它也适用于player.vimeo.com/...
/^.*(?:vimeo.com)\\/(?:channels\\/|groups\\/[^\\/]*\\/videos\\/|album\\/\\d+\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/
答案 4 :(得分:0)
对于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];