tl; dr.
Entspricht allen URL-Beispielen zu dieser und einigen weiteren Fragen.
let re = /^(https?:\/\/)?((www\.)?(youtube(-nocookie)?|youtube.googleapis)\.com.*(v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/)|youtu\.be\/)([_0-9a-z-]+)/i;
let id = "https://www.youtube.com/watch?v=l-gQLqv9f4o".match(re)[7];
ID wird immer in Spielgruppe 7 sein.
Live-Beispiele aller URLs, die ich aus den Antworten auf diese Frage entnommen habe :
https://regexr.com/3u0d4
Vollständige Erklärung:
Da viele Antworten / Kommentare aufgetaucht sind, gibt es viele Formate für YouTube-Video-URLs. Sogar mehrere TLDs, bei denen sie als "gehostet" erscheinen können.
Sie können sich die vollständige Liste der Variationen ansehen, gegen die ich geprüft habe, indem Sie dem obigen Regexr-Link folgen.
Lassen Sie uns die RegExp aufschlüsseln.
^
Sperren Sie die Zeichenfolge an den Anfang der Zeichenfolge.
(https?:\/\/)?
Optionale Protokolle http: // oder https: // Das ?
macht das vorhergehende Element optional, so dasss
und dann die gesamte Gruppe (alles, was in Klammern eingeschlossen ist) optional sind.
Ok, dieser nächste Teil ist das Fleisch davon. Grundsätzlich haben wir zwei Möglichkeiten, die verschiedenen Versionen von www.youtube.com/...[id] und die verkürzte Version youtu.be/[id].
( // Start a group which will match everything after the protocol and up to just before the video id.
(www\.)? // Optional www.
(youtube(-nocookie)?|youtube.googleapis) // There are three domains where youtube videos can be accessed. This matches them.
\.com // The .com at the end of the domain.
.* // Match anything
(v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/) // These are all the things that can come right before the video id. The | character means OR so the first one in the "list" matches.
| // There is one more domain where you can get to youtube, it's the link shortening url which is just followed by the video id. This OR separates all the stuff in this group and the link shortening url.
youtu\.be\/ // The link shortening domain
) // End of group
Schließlich haben wir die Gruppe, um die Video-ID auszuwählen. Mindestens ein Zeichen, das eine Zahl, ein Buchstabe, ein Unterstrich oder ein Bindestrich ist.
([_0-9a-z-]+)
Sie können viel mehr Details zu jedem Teil der Regex herausfinden, indem Sie über den Regexr-Link gehen und sehen, wie jeder Teil des Ausdrucks mit dem Text in der URL übereinstimmt.