Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите "допилить" регулярку. (https://javascript.ru/forum/misc/23218-pomogite-dopilit-regulyarku.html)

nule 16.11.2011 16:35

Помогите "допилить" регулярку.
 
Здравствуйте!
Вот такая регулярка для поиска текстовых ссылок на определенные сайты:
Код:

/((?:https?\:\/\/)*w*\.*(?:imdb|nfomation|youtube|nfo\.sceper)\.[\w\d:#@%/;$()~_?\+-=\\\.&]*)/gi;
Но иногда за текстом ссылки без пробела следует тег <br \>, либо <!--
Естественно, теги прилипают к ссылке.
Пробовал добавить в конец регулярки [^(?:<br)|(?:<\!\-\-] - не работает. (?=(?:<br //>)) - тоже не работает.
Подскажите, пожалуйста, как сделать?
Спасибо!

trikadin 16.11.2011 16:59

Какого типа ссылки надо найти? Приведите примеры, чем больше, тем лучше. Насколько я понял, к тому же, надо их разделять по частям - отдельно протокол, отдельно домен, отдельно querystring и т.д.?

рони 16.11.2011 17:50

nule,
Вариант...
var a = 'http://youtube.ru/<br>', 
     s = a.replace(/((?:https?\:\/\/)*w*\.*(?:imdb|nfomation|youtube|nfo\.sceper)\.[^<\s$]*)/gi, ""); 
alert(s)

nule 16.11.2011 18:53

Цитата:

Сообщение от trikadin (Сообщение 136936)
Какого типа ссылки надо найти? Приведите примеры, чем больше, тем лучше. Насколько я понял, к тому же, надо их разделять по частям - отдельно протокол, отдельно домен, отдельно querystring и т.д.?

Разделять не требуется. Регулярка в таком виде находит все нужные мне ссылки, к этому претензий нет. Единственная недоработка проявляется в случае, когда за ссылкой без пробела следует закрывающий тег <br />. Тогда результатом является "ссылка<br". Надо, чтобы регулярка прекращала обработку, дойдя до "<br".

Цитата:

Сообщение от рони (Сообщение 136941)
nule,
Вариант...
var a = '<a href="http://clcstatistic.gofreeserve.com/install.php?go_uri=http://youtube.ru/<br>'"target="newtab">http://youtube.ru/<br>'</a>, 
     s = a.replace(/((?:https?\:\/\/)*w*\.*(?:imdb|nfomation|youtube|nfo\.sceper)\.[^<\s$]*)/gi, ""); 
alert(s)

Вариант, но пока надеюсь проще сделать, без "ампутации" :)

trikadin 16.11.2011 19:35

А можно я её чуток перепишу?

str= "https://www.youtube.com?bla=true\\lla%@12300&bulab=567#page=11<br>";

reg= /(?:https?:\/\/)?w*\.?(?:imdb|nfomation|youtube|nfo\.sceper)\.[\w\d:#@%/;\$()\\~=\?\+-\.&]*/gi

alert(str.match(reg));

nule 16.11.2011 19:59

Цитата:

Сообщение от trikadin (Сообщение 136954)
А можно я её чуток перепишу?

str= "<a href="http://clcstatistic.gofreeserve.com/install.php?go_uri=https://www.youtube.com?bla=true\\lla%@12300&bulab=567#page=11<br>"target="newtab">https://www.youtube.com?bla=true\\lla%@12300&bulab=567#page=11<br></a>";

reg= /(?:https?:\/\/)?w*\.?(?:imdb|nfomation|youtube|nfo\.sceper)\.[\w\d:#@%/;\$()\\~=\?\+-\.&]*/gi

alert(str.match(reg));

У меня было +-=, а это диапазон символов, включающий в себя <.
Спасибо!

trikadin 16.11.2011 20:05

Цитата:

Сообщение от nule
У меня было +-=, а это диапазон символов, включающий в себя <.
Спасибо!

Ахах! Надо было просто заслешить минус.


Часовой пояс GMT +3, время: 16:12.