Regex для ID YouTube
Я просмотрел все, и я видел много способов разобрать идентификатор видео с URL-адреса для youtube, однако ни один из них не соответствовал всем различным форматам, на которые может быть URL-адрес YouTube. Я пробовал messing с регулярным выражением, представленным в предыдущих сообщениях, но ничего не работало.
Самый близкий пост, который я нашел, который охватывал все различные форматы URL, был следующим: Как найти все идентификаторы видео YouTube в строке с использованием регулярного выражения?
Однако это не работает:
http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM
Я делаю это в Javascript. Может кто-нибудь помочь?!
Thanx заранее.
Текущие форматы URL и script Я использую:
var url = "http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM";
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo";
//var url = "http://youtu.be/NLqAF9hrVbY";
//var url = "http://www.youtube.com/embed/NLqAF9hrVbY";
//var url = "https://www.youtube.com/embed/NLqAF9hrVbY";
//var url = "http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US";
//var url = "http://www.youtube.com/watch?v=NLqAF9hrVbY";
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo";
//var url = "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I";
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo";
//var url = "http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured";
var videoID = url.match(/(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=))([\w\-]{10,12})\b/)[1];
alert(videoID);
Ответы
Ответ 1
Это повторяющийся вопрос, на который был дан ответ.
Я думаю, вы найдете regexp там также будет работать здесь.
проанализировать идентификатор видео YouTube с помощью preg_match
ИЗМЕНИТЬ:
Я заметил, что это не работает для сандалия. URL-адрес, который у вас есть в верхней части списка, поэтому вы можете изменить регулярное выражение на следующее (преобразованное для использования в JS).
var myregexp = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i;
Все, что я сделал, это заменить user
на [^/]+
Идентификатор по-прежнему сохраняется в обратной ссылке 1.
Ответ 2
Было бы очень беспорядочно писать одно регулярное выражение, которое обрабатывает все эти возможные URL-адреса.
Я бы, вероятно, использовал структуру if... else if... else, чтобы определить, в какой форме находится URL, а затем использовать более мелкое более определенное регулярное выражение, чтобы вытащить каждый идентификатор видео.
Ответ 3
Я использую это regexp: /youtu(?:.*\/v\/|.*v\=|\.be\/)([A-Za-z0-9_\-]{11})/
, и он отлично работает для меня.
Ответ 4
Вам, вероятно, не нужно регулярное выражение для этого. В шаблоне очень мало различий, и сами разделители (/
, а иногда ?
, =
или #
) неизменяемы. Я рекомендую вам сделать это шаг за шагом, используя простые старые манипуляции с строкой, чтобы решить следующий ход:
- Разделите URL-адрес на
/
.
- Игнорируйте
http://
и www.
, если они есть.
- Убедитесь, что доменное имя
youtube.com
или youtu.be
.
- Если DN
youtu.be
, идентификатор - следующий сегмент. Верните его и остановитесь.
- Начните параметры синтаксического анализа. Проверьте следующий сегмент:
- Если он
embed
, верните следующий сегмент полностью.
- Если он
v
, разделите на ?
и верните первую часть.
- Если он
user
, посчитайте четыре сегмента вперед, и у вас будет свой идентификатор.
- Если он
watch
, разделите на ?
, а затем на =
.
... и т.д..
Я не знаю, сколько возможных шаблонов для URL-адресов YouTube, но если у вас есть полный список форматов, вы можете просто создать дерево if/else. Мой главный совет - просто разделить на /
и перейти оттуда, используя контекстные подсказки в URL-адресе, чтобы определить, как разбирать остальную часть.
Ответ 5
Попробуйте следующее:
var urls =
["http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM",
"http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
"http://youtu.be/NLqAF9hrVbY",
"http://www.youtube.com/embed/NLqAF9hrVbY",
"https://www.youtube.com/embed/NLqAF9hrVbY",
"http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US",
"http://www.youtube.com/watch?v=NLqAF9hrVbY",
"http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
"http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I",
"http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
"http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured"];
var ids = [];
for(var i in urls) {
tmp = urls [ i ];
tmp2 = get_video_id(tmp);
if(tmp2 != null)
{
ids.push("url:" + tmp + " ID:" + tmp2);
}
}
alert(ids.join("\n"));
function get_video_id(input) {
return input.match(/(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=|\/sandalsResorts#\w\/\w\/.*\/))([^\/&]{10,12})/)[1];
}
Вывод:
url:http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM ID:FJUvudQsKCM
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo
url:http://youtu.be/NLqAF9hrVbY ID:NLqAF9hrVbY
url:http://www.youtube.com/embed/NLqAF9hrVbY ID:NLqAF9hrVbY
url:https://www.youtube.com/embed/NLqAF9hrVbY ID:NLqAF9hrVbY
url:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US ID:NLqAF9hrVbY?
url:http://www.youtube.com/watch?v=NLqAF9hrVbY ID:NLqAF9hrVbY
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo
url:http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I ID:NRHVzbJVx8I
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo
url:http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured ID:JYArUl0TzhA
Ответ 6
var get_id = function(url){
var code = url.match(/v=([^&#]{5,})/)
return (typeof code[1] == 'string') ? code[1] : false;
}
Ответ 7
включил ваши регулярные выражения в этот пример:
(есть ли способ получить массив из текста (с несколькими видео YouTube?)
скопируйте и вставьте файл с именем файла: detectYoutubeLinksAsYouType.html
ps: Является ли это только мной... или является функциональностью LOGIN для stackoverflow.com fulloffsh...
<!DOCTYPE HTML>
<html>
<head>
<title></title>
<!-- scripts -->
<!-- last jquery version that supports ie8/9 -->
<script type="text/javascript" src="../js/jquery-1.10.2.js"></script>
<script type="text/javascript">
/* search for youtube-video-id inside a given text / url */
function findYoutubeVideoID(url) {
// thanks for the regexes guys!
var YoutubeRegexObject_v1 = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i; // only gets the first VideoURL
var YoutubeRegexObject_v2 = /(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=|\/sandalsResorts#\w\/\w\/.*\/))([^\/&]{10,12})/;
var YoutubeVideoID = url.match(YoutubeRegexObject_v1);
return YoutubeVideoID[1];
}
/* generate youtube embed code */
function generateYoutubeEmbedCode(YoutubeVideoID,width,height)
{
if(!width)
{
width = "854";
}
if(!height)
{
height = "510";
}
return '<iframe width="'+width+'" height="'+height+'" src="//www.youtube.com/embed/'+YoutubeVideoID+'" frameborder="0" allowfullscreen></iframe>';
}
$(document).ready(function() {
$("#text").on('change keyup paste', function() {
var text = $(this).html();
var YoutubeVideoID = findYoutubeVideoID(text);
var YoutubeVideoEmbedCode = generateYoutubeEmbedCode(YoutubeVideoID);
$("#findYoutubeVideoID").html(YoutubeVideoID);
$("#DisplayVideo").html(YoutubeVideoEmbedCode);
});
$("#search").on('click', function() {
var text = $("#text").html();
var YoutubeVideoID = findYoutubeVideoID(text);
var YoutubeVideoEmbedCode = generateYoutubeEmbedCode(YoutubeVideoID);
$("#findYoutubeVideoID").html(YoutubeVideoID);
$("#DisplayVideo").html(YoutubeVideoEmbedCode);
});
});
</script>
</head>
<body>
<style>
.parent {
margin: 0 auto;
position: relative;
border: 1px solid red;
width: 500px;
}
.element {
border: 1px solid red;
position: relative;
float: left;
min-height: 20px;
margin: 10px;
min-width: 45%;
}
</style>
<div class="parent">
<div class="element">Detect youtube links as you type!</div>
<div class="element" id="text" contenteditable="true">
Copy paste Youtube-Video-Url here! e.g. this one: https://www.youtube.com/watch?v=QOJ1nYPBonQ
</div>
<div class="element" >The VideoID is:</div>
<div class="element" id="findYoutubeVideoID"></div>
<div class="element" id="DisplayVideo"></div>
<div class="element"> <button id="search">Search for YoutubeID</button></div>
</div>
</body>
</html>