私はURLからvimeoビデオIDを取得するのに最適な正規表現を見つけようとしています。
URLの例:
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
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;
}
Minify:
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;
}
Minify:
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年以上前であり、サポートされているURLタイプが最新ではない可能性があります。私はこの正規表現を積極的に維持しません-これは単に質問への回答として意図されているため、そこにリストされている形式のみを処理します。自己の責任においてこれを使用してください。または、さらに良いことに、これを単なる出発点として使用して、最新かつ包括的なURL形式のリストに基づいて独自の正規表現を開発してください。
APIソリューションについては@ l2aelbaの回答を参照してください https://stackoverflow.com/a/37695721/62281
これは完全な正規表現であり、形式が正しいことも保証します。
/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/
キャプチャグループ1
(存在する場合)のグループ名、キャプチャグループ2
(存在する場合)のアルバムID、キャプチャグループ3
(常に)のビデオIDを取得できるようになりました。 。
次の正規表現は、この情報のみを取得したい人のためにグループ1のIDを返します。質問で指定されたすべてのサンプルURLで機能します。 http://
とhttps://
がなくても機能します。 player.vimeo.com/...
などのURLでも機能します
/^.*(?:vimeo.com)\\/(?:channels\\/|groups\\/[^\\/]*\\/videos\\/|album\\/\\d+\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/
var r = /(videos|video|channels|\.com)\/([\d]+)/,
a = "https://vimeo.com/album/2222222/video/11111111";
console.log(a.match(r)[2]); // 11111111;
PHPの場合、以下のコードは次のURLで機能します
つまり:
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];