28.07.2012, 09:26
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Hekumok
|
а зачем в обоих ваших кодах (в конце кодов) \w заключать в квадратные скобки,
|
а хз... видимо с просто уже не соображал ничего вчера в это время.
|
|
28.07.2012, 12:43
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
devote, ясно а вы не знаете, где можно посмотреть какие-нить задачки с регулярками? Или сами какую-нибудь мне подкиньте потренироваться просто хочу с ними...
|
|
28.07.2012, 21:22
|
sinistral
|
|
Регистрация: 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.
|
|
28.07.2012, 21:33
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
melky,
ну я собственно и не старался, я понятия не имею какие там ссылки бывают на ютубе. Ну а если бы задался решением, решил бы без проблем.
|
|
28.07.2012, 21:36
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от devote
|
ну я собственно и не старался, я понятия не имею какие там ссылки бывают на ютубе. Ну а если бы задался решением, решил бы без проблем.
|
я ещё специально ID новый подобрал, с тире жаль.
|
|
28.07.2012, 21:38
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
жаль что не задавался вопросом? melky, я не фанатею от составления регулярок, знаю их давно еще до изучения JS. И как бы интерес был тогда когда их не знал, сейчас не тащусь от того что бы такое на них слепить.
|
|
28.07.2012, 21:57
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
melky, супер щас постараюсь свою доделать, чтоб тож все эти ссылки парсила...у мну ток ссылки с мусором не ловит...и, ксать, никогда не видел, чтоб ссылка с двух слешей // начиналась О.о
|
|
28.07.2012, 22:35
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от devote
|
жаль что не задавался вопросом? melky, я не фанатею от составления регулярок, знаю их давно еще до изучения JS. И как бы интерес был тогда когда их не знал, сейчас не тащусь от того что бы такое на них слепить.
|
я тоже от них раньше не фанател, до того момента, как не увидел способ их описания, как у меня в примере - т.е. комментируя их по частям. от этого сразу интерес возрос, на время правда, иметь дело я с ними более-менее серьёзно начал в JS, отчего завидую Вам.
Сообщение от Hekumok
|
никогда не видел, чтоб ссылка с двух слешей // начиналась О.о
|
таки я тоже, но при составлении реги я на всякий это учитывал.
Сообщение от Hekumok
|
melky, супер щас постараюсь свою доделать, чтоб тож все эти ссылки парсила...у мну ток ссылки с мусором не ловит
|
я проблему с мусором решал дольше, чем саму регу составлял )
|
|
28.07.2012, 22:51
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
урааааааа! Я сделал это! См. пост #10
Проблему с двойным слешем и где id не первый решил легко, а вот с мусором, как и вы, помучался...блин, я там чё тока не пробовал!)))
|
|
28.07.2012, 23:10
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Hekumok,
В методев с массивом регеспов, - чем хорошо - не нужно мучацо- измудряцо - воткнул варианты ссылок - если нужно - дополнил по ходу...
|
|
|
|