я бы сделал так :
(рега очень корявая
долго мучися с "мусором". вроде бы ловит все варианты)
var reg = new RegExp(
// ссылка начинается с протокола и с www, или с "//", или с ничего :).
"(?:" +
"(?:" +
"\\/\\/" + // я чуть про них не забыл :)
")|(?:" +
"(?:http:\\/\\/)?" + // необязательны
"(?:www\\.)?" +
")" +
")" +
// дальше домен
"(?:" +
// у нас 2 варианта - короткий и полный. можно сделать через "|"
"(?:" +
"youtube\\.com\\/watch\\?" + // полный вид ссылки на видео
"(?:.+?&)?" + // "v" может быть не первым - порядок параметров неважен
"v=" + // параметр, определяющий ИД видео
")|(?:" +
"youtu\\.be\\/" + // теперь короткий вариант
")" +
")" +
// после этого идёт ИД видоса.
"([a-z0-9-]+)" +
// после ИДа - мусор
"[^\\s\\n\\t]+",
// текст мультистрочен, ссылки не имеют регистра, ищём всё
"img"
);
var text = "новый видос погляди : \n\n полный вид ссылки : http://www.youtube.com/watch?v=y-Q49kLd7EA \n без протокола : www.youtube.com/watch?v=y-Q49kLd7EA \n без www : youtube.com/watch?v=y-Q49kLd7EA \n с двумя слешами : //youtube.com/watch?v=y-Q49kLd7EA \n параметр ИД не первый : youtube.com/watch?feature=relmfu&v=y-Q49kLd7EA \n короткий вид ссылки : youtu.be/y-Q49kLd7EA \n ссылки с мусором : youtube.com/watch?v=y-Q49kLd7EA&feauture=youtu.be \n youtube.com/watch?v=y-Q49kLd7EA#t=5s \n ссылка с верхним регистром : YOUTUBE.COM/WATCH?V=Y-Q49KLD7EA";
alert( text )
alert( text.replace(reg, "$1") );
Deff :
var str = ["полный вид ссылки : http://www.youtube.com/watch?v=y-Q49kLd7EA ", " без протокола : www.youtube.com/watch?v=y-Q49kLd7EA ", " без www : youtube.com/watch?v=y-Q49kLd7EA ", " с двумя слешами : //youtube.com/watch?v=y-Q49kLd7EA ", " параметр ИД не первый : youtube.com/watch?feature=relmfu&v=y-Q49kLd7EA ", " короткий вид ссылки : youtu.be/y-Q49kLd7EA ", " ссылка с мусором : youtube.com/watch?v=y-Q49kLd7EA&feauture=youtu.be ", "ссылка с мусором : youtube.com/watch?v=y-Q49kLd7EA#t=5s ", " ссылка с верхним регистром : YOUTUBE.COM/WATCH?V=Y-Q49KLD7EA"]
function ReturnYoutubId(str) {
var Mass ="http://youtu.be/,www.youtube.com/watch?v=";
Mass = Mass.split(",");//alert(Mass);
var Out = "";
for(var i=0; i<Mass.length; i++){
var reg = new RegExp(".*?"+Mass[i].replace(/\?/ig,'\\?')+"(\\S*?\\S(?=\\s|$))","ig");
var st2 = str.replace(reg,',$1');
if(st2!= str){Out+=st2;str=str.replace(st2,'');}
} return Out.substring(1).split(",");;
}
for(var i=0; i<str.length; i++){
alert(ReturnYoutubId(str[i]))
}
devote :
var a = ["полный вид ссылки : http://www.youtube.com/watch?v=y-Q49kLd7EA ", " без протокола : www.youtube.com/watch?v=y-Q49kLd7EA ", " без www : youtube.com/watch?v=y-Q49kLd7EA ", " с двумя слешами : //youtube.com/watch?v=y-Q49kLd7EA ", " параметр ИД не первый : youtube.com/watch?feature=relmfu&v=y-Q49kLd7EA ", " короткий вид ссылки : youtu.be/y-Q49kLd7EA ", " ссылка с мусором : youtube.com/watch?v=y-Q49kLd7EA&feauture=youtu.be ", "ссылка с мусором : youtube.com/watch?v=y-Q49kLd7EA#t=5s ", " ссылка с верхним регистром : YOUTUBE.COM/WATCH?V=Y-Q49KLD7EA"]
for( var i = 0; i < a.length; i++ ) {
alert( a[i].replace( /(?:(?:https?:\/\/)?.*?\.(?:ru|com)\/(?:watch\?v=)?([\w]*)|(.*))/gi, "$1" ) );
}