Как получить идентификатор видео YouTube с URL-адреса? - PullRequest
220 голосов
/ 10 августа 2010

Я хочу получить v=id из URL YouTube с помощью JavaScript (без jQuery, чистый JavaScript).

Примеры форматов URL YouTube

http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW

http://www.youtube.com/watch?v=u8nQa1cJyX8

Или любой другой формат YouTube, который содержит идентификатор видео в URL.

Результат из этих форматов

u8nQa1cJyX8

Ответы [ 32 ]

5 голосов
/ 27 августа 2011

Поскольку идентификаторы видео на YouTube установлены на 11 символов , мы можем просто substring после того, как мы разделим URL с помощью v=.Тогда мы не зависим от амперсанда в конце.

var sampleUrl = "http://www.youtube.com/watch?v=JcjoGn6FLwI&asdasd";

var video_id = sampleUrl.split("v=")[1].substring(0, 11)

Красиво и просто :)

5 голосов
/ 15 января 2019

Лучшее решение (с 2019 г.), которое я нашел, это:

function YouTubeGetID(url){
   url = url.split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/);
   return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_\-]/i)[0] : url[0];
}

Я нашел это здесь .

/*
* Tested URLs:
var url = 'http://youtube.googleapis.com/v/4e_kz79tjb8?version=3';
url = 'https://www.youtube.com/watch?feature=g-vrec&v=Y1xs_xPb46M';
url = 'http://www.youtube.com/watch?feature=player_embedded&v=Ab25nviakcw#';
url = 'http://youtu.be/Ab25nviakcw';
url = 'http://www.youtube.com/watch?v=Ab25nviakcw';
url = '<iframe width="420" height="315" src="http://www.youtube.com/embed/Ab25nviakcw" frameborder="0" allowfullscreen></iframe>';
url = '<object width="420" height="315"><param name="movie" value="http://www.youtube-nocookie.com/v/Ab25nviakcw?version=3&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/Ab25nviakcw?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>';
url = 'http://i1.ytimg.com/vi/Ab25nviakcw/default.jpg';
url = 'https://www.youtube.com/watch?v=BGL22PTIOAM&feature=g-all-xit';
url = 'BGL22PTIOAM';
*/
4 голосов
/ 09 сентября 2011

Я суммировал все предложения и вот универсальный и краткий ответ на этот вопрос:

if(url.match('http://(www.)?youtube|youtu\.be')){
    youtube_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
}
2 голосов
/ 27 августа 2015

Еще один:

var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2]

Работает с любым URL, показанным в этой теме.

Не будет работать, если YouTube добавит другой параметр с 11 символами base64. До этого это легкий путь.

2 голосов
/ 23 марта 2012

Слегка измененная версия от одного опубликованного сообщения:

var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]{11,11}).*/;
var match = url.match(regExp);
if (match) if (match.length >= 2) return match[2];
// error

Предполагается, что код всегда состоит из 11 символов.Я использую это в ActionScript, но не уверен, что {11,11} поддерживается в Javascript.Также добавлена ​​поддержка & v = .... (на всякий случай)

2 голосов
/ 21 апреля 2015

Это определенно требует регулярного выражения:

Копирование в Ruby IRB:

var url = "http://www.youtube.com/watch?v=NLqASIXrVbY"
var VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
url.match(VID_REGEX)[1]

См. Для всех тестов: https://gist.github.com/blairanderson/b264a15a8faaac9c6318

1 голос
/ 30 мая 2013

Мне понравился ответ Сурьи .. Просто случай, когда он не работает ...

String regExp = "/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";

не работает для

youtu.be/i4fjHzCXg6c  and  www.youtu.be/i4fjHzCXg6c

обновленная версия:

String regExp = "/?.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";

работает для всех.

1 голос
/ 05 ноября 2014

Пример ответа от Lasnv, предложенный Chris Nolet cleaner, очень хорош, но недавно я обнаружил, что если вы пытаетесь найти ссылку на youtube в тексте и вставить какой-то случайный текст после URL-адреса youtube, регулярное выражение соответствует намного больше, чем нужно.Улучшенный ответ Криса Ноле:

/^.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]{11,11}).*/
1 голос
/ 03 августа 2013

Попробуйте это -

function getYouTubeIdFromURL($url) 
{
  $pattern = '/(?:youtube.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})/i';
  preg_match($pattern, $url, $matches);

  return isset($matches[1]) ? $matches[1] : false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...