Показать сообщение отдельно
  #23 (permalink)  
Старый 28.07.2012, 21:22
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

я бы сделал так :

(рега очень корявая долго мучися с "мусором". вроде бы ловит все варианты)

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" ) );
}

Последний раз редактировалось melky, 28.07.2012 в 21:29.
Ответить с цитированием