tl; dr.
Соответствует всем URL-примерам по этому вопросу, а затем некоторым.
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 всегда будет в группе совпадений 7.
Живые примерыиз всех URL-адресов, которые я выбрал из ответов на этот вопрос: https://regexr.com/3u0d4
Полное объяснение:
Поскольку появилось много ответов / комментариев, существует множество форматов для URL-адресов видео YouTube.Даже несколько TLD, где они могут показаться «размещенными».
Вы можете посмотреть полный список проверенных мной вариантов, перейдя по ссылке regexr выше.
Давайте разберем RegExp.
^
Зафиксируйте строку в начале строки.(https?:\/\/)?
Необязательные протоколы http: // или https: //. ?
делает предыдущий элемент необязательным, поэтому s
и вся группа (все, что заключено в скобки) являются необязательными.
Хорошо, эта следующая часть - главное.В основном у нас есть два варианта: различные версии www.youtube.com/...[id] и сокращенная ссылка youtu.be/[id] version.
( // 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
Наконец, у нас есть группа длявыберите идентификатор видео.По крайней мере один символ, который является числом, буквой, подчеркиванием или тире.
([_0-9a-z-]+)
Вы можете узнать гораздо больше подробностей о каждой части регулярного выражения, перейдя по ссылке регулярного выражения и увидев, как каждая частьвыражение совпадает с текстом в URL.