2012-11-08 18 views
25

Próbuję znaleźć najlepsze wyrażenie regularne, aby pobrać identyfikator wideo Vimeo z adresu URL.Pobierz identyfikator wideo z adresu Vimeo

przykładowe adresy 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 

Mój obecny regexp, który nie działa:

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

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

+1

można użyć 'url.split ('/') plasterek (-1) [0] .split ('?') [0] ', lub czy regex jest wymaganiem? – Yoshi

Odpowiedz

9

Od 2016 r. I @Martin Ender sai d no longer up to date


Więc tutaj jest rozwiązanie API:(bez regexp ale API rozmówcy i bezpieczne!)

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} 

Czysta/Native JS:(IE9 + & Nowoczesne przeglądarki)

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

Niektóre typ url nie obsługuje? :https://vimeo.com/help/contact#tech-api(Powiedz im, Nie mów do mnie hehe: D).

32

Aktualizacja: Zauważyłem, że ta odpowiedź jest coraz trochę uwagi co jakiś czas (poprzez głosy i komentarze). Odpowiedź jest więcej niż dwa lata i prawdopodobnie obsługiwane typy adresów URL nie są już aktualne. Nie będę aktywnie utrzymywał tego wyrażenia - służy on jedynie jako odpowiedź na pytanie, a zatem zajmuje się jedynie wymienionymi tam formatami. Używaj tego na własne ryzyko lub - nawet lepiej - używaj go jedynie jako punktu wyjściowego do opracowania własnego wyrażenia regularnego na podstawie aktualnej i wyczerpującej listy formatów URL. Odpowiedź

Zobacz @ l2aelba za rozwiązanie API https://stackoverflow.com/a/37695721/622813


Byłoby pełnej regex, który zapewnia również, że format jest poprawny:

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

Teraz można pobrać nazwy grupy w przechwytywanie grupy 1 (jeśli istnieje), identyfikator albumu w grupie przechwytywania 2 (jeśli jest obecny) i identyfikator wideo w przechwytywaniu grupy 3 (zawsze).

Demo

+0

jakiś błąd? 'Linia 1: vimeo_Reg = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/|groups\/[ ^\/]*\/videos\/|album \/\ d + \/video \/|) (\ d +) ($ | \/|?) /; --- Unescaped "?". ' – l2aelba

+1

@ l2aelba przepraszam, skopiuj wklej błąd. skopiuj kod z mojej odpowiedzi do wersji demonstracyjnej. –

+0

działa teraz, więc dzięki – l2aelba

3

Poniżej regex zwróci identyfikator na grupy 1 dla tych, którzy chcą tylko, aby pobrać tę informację. Działa ze wszystkimi przykładowymi adresami URL podanymi w pytaniu. Działa również bez http:// i https://. Działa również z adresami URL jak player.vimeo.com/...

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

Oto wersja bez znaku + dodane wsparcie dla http://vimeo.com/channels/channelname/1111111111: '/^.* (?: vimeo.com) \/(?: channels \/| channels \/\ w + \/| groups \/[^ \ /] * \/videos \/| album \/\ d + \/video \/| video \/|) (\ d +) (? : $ | \/| \?)/' –

0

dla PHP, poniżej kod działa dla następujących adresów URL

czyli: Kod

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

Czy to działa, jeśli' http: //vimeo.com/11111111? Param = test'? – l2aelba

+1

to powróci: 11111111? Param = test –

Powiązane problemy