Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   поиск ссылок на странице (https://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice.html)

devote 04.12.2011 23:11

Вот начирикал последний вариант, удаляет знаки препинания и вские там символы в конце ссылки...
var a = [
    'Привет, на вот зацени ссылку: "http://test.ru/blablablah.html?test=param&qwerty#anchor." это крутая ссыль =) и вот еще www.google.ru, www.tarampampam.com!!! и вот еще файлик на ФТП ftp://tarampampam.ru/file.zip.',

    'http://translate.google.ru/?js=n&prev=_t&hl=ru&ie=UTF-8&layout=2&eotf=1&sl=en&tl=ru&text=Possibly+another+solution+would+be+to+have+the+description+text+hidden+by+default+and+only+shows+when+the+title+is+focused%2Fhovered+over.%0D%0A%0D%0A+Here%27s+an+example%3A+http%3A%2F%2Fwww.1true.co.uk%2Ffastscroll.html&file=#en|ru|blah',

    'http://президент.рф/документы',

    '"http://testdomen/blabla/" - не заматчило - это by design?',

    'Крутая:http://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice-5.html-ссылка',

    'http://дердымцопцоп,.ru/',

    'http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg',

    'http://yandex.ru-хорошая ссылка'
];

for( var b, i = 0; i < a.length; i++ ) {
b = a[i].match( /(?:(http(?:s)?|ftp)(:\/\/)|(www(?:[0-9]+)?\.))((?:([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)\/[^\s]+(?!\s|$)[^`~!@#$%^&*()_+|=\\{}\[\];:'"<,.>\-?\s]+)|([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+))/ig );

alert(b);
}

devote 04.12.2011 23:19

Ну хоть такая рега покатит вам? Щас она убивает знаки препинания не нужные в конце ссыли. И реверсов не надо делать.

devote 04.12.2011 23:57

хотя есть ссылки содержащие имя пользователя и пароль в ссылке, для этого можно убрать из запрещенных два символа ":@" тоесть двоеточие и сабаку.

примерно так:
var a = '"ftp://username:password@domen.net/path/path/file.dat"'.
match( /(?:(http(?:s)?|ftp)(:\/\/)|(www(?:[0-9]+)?\.))((?:([^`~!#$%^&*()_+|=\\{}\[\];'"<,>?\/\s]+)\/[^\s]+(?!\s|$)[^`~!@#$%^&*()_+|=\\{}\[\];:'"<,.>\-?\s]+)|([^`~!#$%^&*()_+|=\\{}\[\];'"<,>?\/\s]+))/ig );
alert(a);

Gozar 05.12.2011 00:01

devote,
Всё хорошо, за исключением того, что это http://дердымцопцоп она найти не должна была. Спасибо за участие. Твоей регой можно будет прогонять ссылку как дополнительным фильтром, без реверса. Хотя возможно это не потребуется, если немного изменить первую часть.

devote 05.12.2011 00:14

Gozar,
Хоть покажешь полный результат? Когда закончишь делать полноценный фильтр ссылок. А насчет то ссыли, можно добавить что бы он не хватал локальные ссылки, тоесть без домена первого уровня. Это примерно так:

var a = [ 
    'Привет, на вот зацени ссылку: "http://test.ru/blablablah.html?test=param&qwerty#anchor." это крутая ссыль =) и вот еще www.google.ru, www.tarampampam.com!!! и вот еще файлик на ФТП ftp://tarampampam.ru/file.zip.', 
  
    'http://translate.google.ru/?js=n&prev=_t&hl=ru&ie=UTF-8&layout=2&eotf=1&sl=en&tl=ru&text=Possibly+another+solution+would+be+to+have+the+description+text+hidden+by+default+and+only+shows+when+the+title+is+focused%2Fhovered+over.%0D%0A%0D%0A+Here%27s+an+example%3A+http%3A%2F%2Fwww.1true.co.uk%2Ffastscroll.html&file=#en|ru|blah', 
  
    'http://президент.рф/документы', 
  
    '"http://testdomen/blabla/" - не заматчило - это by design?', 
  
    'Крутая:http://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice-5.html-ссылка', 
  
    'http://дердымцопцоп,.ru/', 
  
    'http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg', 
  
    'http://yandex.ru-хорошая ссылка'
]; 
  
for( var b, i = 0; i < a.length; i++ ) { 
b = a[i].match( /(?:(http(?:s)?|ftp)(:\/\/)|(www(?:[0-9]+)?\.))([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)\.((?:([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)\/[^\s]+(?!\s|$)[^`~!@#$%^&*()_+|=\\{}\[\];:'"<,.>\-?\s]+)|([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+))/ig ); 
  
alert(b); 
}

Gozar 05.12.2011 00:25

Цитата:

Сообщение от devote (Сообщение 140775)
Хоть покажешь полный результат?

Ок, только это два разных результата, для одного из которых подходит и твоя рега, может я её немного конкретизирую, а второй результат может быть получен не так скоро как хотелось бы, поэтому если вспомню, то отпишусь обязательно.

Первую регу может завтра выложу, попробую сократить твою. Идею твою я понял и рега должна получиться короче.

devote 05.12.2011 00:47

Вот полностью законченный вариант, ну по крайней мере на мой взгляд, можно смело юзать.

var a = [  
    'Привет, на вот зацени ссылку: "http://test.ru/blablablah.html?test=param&qwerty#anchor." это крутая ссыль =) и вот еще [url]www.google.ru[/url], [url]www.tarampampam.com[/url]!!! и вот еще файлик на ФТП ftp://tarampampam.ru/file.zip.',  
    
    'http://translate.google.ru/?js=n&prev=_t&hl=ru&ie=UTF-8&layout=2&eotf=1&sl=en&tl=ru&text=Possibly+another+solution+would+be+to+have+the+description+text+hidden+by+default+and+only+shows+when+the+title+is+focused%2Fhovered+over.%0D%0A%0D%0A+Here%27s+an+example%3A+http%3A%2F%2Fwww.1true.co.uk%2Ffastscroll.html&file=#en|ru|blah',  
    
    'http://президент.рф/документы',  
    
    '"http://testdomen/blabla/" - не заматчило - это by design?',  // не корректная ссылка, нет верхнего домена
    
    'Крутая:http://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice-5.html-ссылка',  
    
    'http://дердымцопцоп,.ru/',  // не корректная ссылка
    
    'http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg',  
    
    'http://yandex.ru-хорошая ссылка',

    'ftp://username:password@domen/blah/', // не корректная нет верхнего домена

    'ftp://username:password@domen.ru/blah/',

    'ftp://password@domen.ru/blah/',  // допустимая ссылка

    'ftp://username:@domen.ru/blah/',   // допустимая ссылка

    'ftp://username:domen.ru/blah/',  // не корректная ссылка

    'ftp://username@:domen.ru/blah/',  // не корректная ссылка

    'http://blah.ru:8089',

    'http://blah.ru:8080/lalalala/',

    'ftp://username:password@domen.ru:3131/blah/'
]; 

for( var b, i = 0; i < a.length; i++ ) {  
b = a[i].match( /(?:(http(?:s)?|ftp)(:\/\/)(?:[^:]+(?::)?[^@]+@)?|(?:[^:]+(?::)?[^@]+@)?(www(?:[0-9]+)?\.))([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)\.((?:([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)(?::[0-9]+)?\/[^\s]+(?!\s|$)[^`~!@#$%^&*()_+|=\\{}\[\];:'"<,.>\-?\s]+)|([^`~!@#$%^&*()_+|=\\{}\[\];:'"<,>?\/\s]+)(?::[0-9]+)?)/ig );  
    
alert(b);
}

devote 05.12.2011 00:57

номера портов добавил... про них то я подзабыл)))

Aetae 05.12.2011 02:09

А теперь ещё придумайте как оборачивать такие ссылки:
http://<u>www.<b>google</b>.ru</u>/#q=trololo
*trollface.jpg*

trikadin 05.12.2011 02:24

replace(/<\/?\S*?>/g)


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