2012-11-08 32 views
25

Sto cercando di trovare la migliore espressione regolare per recuperare l'ID video di vimeo dall'URL.Ottieni ID video da Vimeo url

URL di esempio:

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 

Il mio attuale espressione regolare che non funziona:

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

giochi & test:http://jsbin.com/asuqic/1/edit?javascript,live

+1

si potrebbe usare 'url.split ('/') slice (-1) [0] .split ('?') [0] ', o è regex un requisito? – Yoshi

risposta

9

Dal 2016. E @Martin Ender sai d no longer up to date


Quindi, ecco una soluzione API:(senza espressioni regolari, ma API chiamante e sicuro!)

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 + & Browser moderni)

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} 

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

Alcuni tipi di URL non supporta? :https://vimeo.com/help/contact#tech-api(Dite loro, Non ditemi hehe: D).

3
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

+0

oh bel trucco: D – l2aelba

32

Aggiornamento: Ho notato che questa risposta è sempre una certa attenzione di tanto in tanto (attraverso il voto o commenti). La risposta ha più di due anni e probabilmente i tipi di URL supportati non sono più aggiornati. Non manterrò attivamente questa espressione regolare - è semplicemente intesa come risposta alla domanda e quindi si occupa solo dei formati elencati qui. Usalo a tuo rischio, o, ancora meglio, usalo solo come punto di partenza per sviluppare la tua espressione regolare sulla base di un elenco aggiornato e completo di formati di URL. risposta

vedere @ di l2aelba per soluzione API https://stackoverflow.com/a/37695721/622813


Questo sarebbe l'espressione regolare completa, che assicura inoltre che il formato è corretto:

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

È ora possibile recuperare il nome del gruppo in Catturare il gruppo 1 (se presente), l'ID dell'album nel gruppo di acquisizione 2 (se presente) e l'ID video nel gruppo di acquisizione 3 (sempre).

Demo

+0

qualche errore? 'Linea 1: vimeo_Reg = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/|groups\/[^\/]*\/videos\/|album \/\ d + \/video \/|) (\ d +) ($ | \/|) /?; --- Senza caratteri maiuscoli? '.' – l2aelba

+1

@ l2aelba scusa, copia incolla errore. copia il codice dalla mia risposta nella demo. –

+0

ora funziona, quindi grazie – l2aelba

3

La seguente espressione regolare restituirà l'ID sul gruppo 1 per coloro che vogliono solo per recuperare queste informazioni. Funziona con tutti gli URL di esempio forniti nella domanda. Funziona anche senza http:// e https://. Funziona anche con gli URL come player.vimeo.com/...

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

Ecco la versione senza escape + supporto aggiunto per http://vimeo.com/channels/channelname/1111111111: '/^.* (?: vimeo.com) \/(?: Canali \/| canali \/\ w + \/| gruppi \/[^ \ /] * \/video \/| album \/\ d + \/video \/| video \/|) (\ d +) (? : $ | \/| \?)/' –

0

per PHP, sotto codice funziona per seguenti URL

cioè: Codice

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]; 
+0

Funziona se' http: //vimeo.com/11111111? Param = test'? – l2aelba

+1

restituirà: 11111111? Param = test –

Problemi correlati