Chcę uzyskać v=id
z adresu URL YouTube z JavaScript (bez jQuery, czysty JavaScript).
Przykładowe formaty adresów URL YouTube
http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW
http://www.youtube.com/watch?v=u8nQa1cJyX8
Lub dowolny inny format YouTube, który zawiera identyfikator wideo w adresie URL.
Wynik z tych formatów
u8nQa1cJyX8
javascript
regex
url
youtube
Adam
źródło
źródło
Odpowiedzi:
Nie musisz do tego używać wyrażenia regularnego.
źródło
https://youtu.be/{{video_id}}
url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
Wprowadziłem ulepszenie do Regex dostarczone przez „jeffreypriebe”, ponieważ potrzebował pewnego rodzaju URL-a YouTube, który jest adresem URL filmów, gdy przeglądają kanał.
No nie, ale to jest funkcja, którą uzbroiłem.
Są to obsługiwane typy adresów URL
Można znaleźć w [http://web.archive.org/web/20160926134334/] http://lasnv.net/foro/839/Javascript_parsear_URL_de_YouTube
źródło
/.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/
użyjmatch[1]
zamiastmatch[7]
(co wydawało mi się trochę arbitralne). Naprawiono również błąd wskazany przez WebDev.Uprościłem trochę odpowiedź Lasnv.
Naprawia również błąd opisany przez WebDeb.
Oto on:
Oto link do wyrażenia regularnego do gry: http://regexr.com/3dnqv
źródło
Żadne z nich nie działało na zlewie kuchennym od 1 stycznia 2015 r., W szczególności adresy URL bez protokołów http / si z domeną youtube-nocookie. Oto zmodyfikowana wersja, która działa na wszystkich różnych wersjach Youtube:
źródło
^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*
(tzn. Youtube.com/watch?v= nie będzie pasował)Testowane na:
Zainspirowany inną odpowiedzią .
źródło
Biorąc pod uwagę, że YouTube ma wiele stylów adresów URL, myślę, że Regex jest lepszym rozwiązaniem. Oto mój Regex:
Grupa 3 ma Twój identyfikator YouTube
Przykładowe adresy URL YouTube (obecnie, w tym „starszy styl osadzania adresów URL”) - powyższy Regex działa na wszystkich:
Porada dla Lasnv
źródło
"domain.com/embed/file.txt"
,"/tv/"
i"Has anyone seen my watch?"
. Zobacz: moja odpowiedź na podobne pytanie w celu uzyskania bardziej precyzyjnego rozwiązania.Stworzyłem funkcję, która testuje dane wejściowe użytkowników dla identyfikatorów Youtube, Soundcloud lub Vimeo, aby móc stworzyć bardziej ciągły projekt z osadzonymi multimediami. Ta funkcja wykrywa i zwraca obiekt o dwóch właściwościach: „type” i „id”. Typem może być „youtube”, „vimeo” lub „soundcloud”, a właściwość „id” jest unikalnym identyfikatorem multimediów.
Na stronie korzystam ze zrzutu tekstowego, w którym użytkownik może wkleić dowolny typ linku lub kodu osadzania, w tym osadzanie iFrame zarówno vimeo, jak i youtube.
źródło
Późno do gry tutaj, ale zebrałem dwie doskonałe odpowiedzi od mantish i jw. Po pierwsze, zmodyfikowane wyrażenie regularne:
Oto kod testowy (dodałem oryginalne przypadki testowe Mantisha do nieprzyjemnych przypadków JW):
Wersja eksperymentalna do obsługi adresów URL m.youtube wspomnianych w komentarzach:
Wymaga
parsed[2]
zmianyparsed[3]
w dwóch miejscach w testach (które następnie przechodzi zm.youtube
adresami URL dodanymi do testów). Daj mi znać, jeśli zobaczysz problemy.źródło
http://youtu.be/
jeśli po dodaniu/
oznaczę to jako prawidłowe. Korzystanie z niego w(value) => /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/.test(value)
tl; dr.
Pasuje do wszystkich przykładów adresów URL dla tego pytania, a następnie niektórych.
ID zawsze będzie w grupie 7 meczów.
Żywe przykłady wszystkich adresów URL, które pobrałem z odpowiedzi na to pytanie: https://regexr.com/3u0d4
Pełne wyjaśnienie:
Ponieważ pojawiło się wiele odpowiedzi / komentarzy, istnieje wiele formatów adresów URL filmów z YouTube. Nawet wiele TLD, w których mogą się wydawać „hostowane”.
Możesz zobaczyć pełną listę odmian, z którymi sprawdziłem, klikając powyższy link regexr.
Pozwala rozbić RegExp.
^
Zablokuj ciąg do początku łańcucha.(https?:\/\/)?
Opcjonalne protokoły http: // lub https: // To?
sprawia, że poprzedni element jest opcjonalny, więcs
a następnie cała grupa (wszystko zawarte w zestawie nawiasów) jest opcjonalna.Ok, ta kolejna część jest jego mięsem. Zasadniczo mamy dwie opcje, różne wersje www.youtube.com/...[id] i link skróconą wersję youtu.be/[id].
Wreszcie mamy grupę do wybrania identyfikatora wideo. Co najmniej jeden znak, który jest liczbą, literą, podkreśleniem lub myślnikiem.
Możesz dowiedzieć się o wiele więcej szczegółów na temat każdej części wyrażenia regularnego, przechodząc nad linkiem wyrażenia regularnego i sprawdzając, jak każda część wyrażenia pasuje do tekstu w adresie URL.
źródło
Najlepsze rozwiązanie (z lat 2019-2020), które znalazłem, to:
Znalazłem to tutaj .
źródło
Ponieważ identyfikatory filmów na YouTube mają 11 znaków , możemy po prostu
substring
podzielić adres URLv=
. Wtedy nie jesteśmy uzależnieni od ampersand na końcu.Ładnie i prosto :)
źródło
Podsumowałem wszystkie sugestie i oto uniwersalna i krótka odpowiedź na to pytanie:
źródło
Kod Java: (Działa dla wszystkich adresów URL:
)
W przypadku DailyMotion:
źródło
Nieco bardziej rygorystyczna wersja:
Testowane na:
źródło
Możesz użyć następującego kodu, aby uzyskać identyfikator wideo YouTube z adresu URL:
źródło
Nieznacznie zmieniona wersja z tej opublikowanej przez Mantisha:
Zakłada się, że kod ma zawsze 11 znaków. Używam tego w ActionScript, nie jestem pewien, czy {11,11} jest obsługiwany w JavaScript. Dodano także obsługę & v = .... (na wszelki wypadek)
źródło
To zdecydowanie wymaga wyrażenia regularnego:
Skopiuj do Ruby IRB:
Zobacz wszystkie przypadki testowe: https://gist.github.com/blairanderson/b264a15a8faaac9c6318
źródło
Jeszcze jeden:
Działa z dowolnym adresem URL pokazanym w tym wątku.
Nie zadziała, gdy YouTube doda jakiś inny parametr z 11 znakami base64. Do tego czasu jest to prosty sposób.
źródło
Zrobiłem małą funkcję, aby wyodrębnić identyfikator wideo z adresu URL Youtube, który można zobaczyć poniżej.
Ta funkcja wyodrębni identyfikator wideo, nawet jeśli adres URL zawiera wiele parametrów.
źródło
Może to uzyskać identyfikator wideo z dowolnego rodzaju linków do youtube
źródło
Podobała mi się odpowiedź Suryi .. Tylko przypadek, w którym nie zadziała ...
nie działa dla
zaktualizowana wersja:
działa dla wszystkich.
źródło
Spróbuj tego -
źródło
Przykład Chrisa Noleta z odpowiedzią Lasnv jest bardzo dobry, ale ostatnio dowiedziałem się, że jeśli próbujesz znaleźć link do youtube w tekście i wstawić losowy tekst za adresem URL youtube, regexp pasuje o wiele bardziej niż to konieczne. Poprawiona odpowiedź Chrisa Noleta:
źródło
Dla testów:
źródło
Cóż, sposobem na zrobienie tego z prostą analizą byłoby: zacznij wszystko od pierwszego = znak do pierwszego i znak.
Myślę, że mieli podobną odpowiedź tutaj:
Analizujesz identyfikator Vimeo za pomocą JavaScript?
źródło
&
?Wiemy, że te znaki „? V =” nigdy nie mogą pojawiać się więcej niż jedynki, ale „v” może pojawić się jakoś w samym Id, więc używamy „? V =” jako separatora. Zobacz, jak działa tutaj
źródło
Proste wyrażenie regularne, jeśli masz pełny adres URL, zachowaj prostotę.
źródło
mam nadzieję, że to może pomóc
źródło
Najkrótszy i wydajny
źródło
Jak wspomniano w komentarzu do paska :
źródło