Цитата:
|
Т.к. в адресную строку теперь пихают не только английские символы, то я решил не усложнять дальше регу, как предполагалось изначально:
В консоль: ' ссылками:[url]www.google.ru[/url] даже проверь свою регу.,карту google.ru.maps [url]http://maps.google.ru/maps/pre-fixфыва[/url] бла тестссылка:[url]http://дердымцопцоп,.ru/[/url] ну ылку: [url]http://testdomen/blabla/[/url] за ссылку, [url]http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg или просто http://ru,.ru/ну или просто т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|Mistletoe,'.replace("\[(\\)?url\]").replace(/\[[/]?url\]/g,"").match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/|?@&#%a)(-z0-9]+)?(?=\b)/ig) а пойти другим путем: сначала искать в тексте совпадения не придирчивое, а затем вычленять русские и английские урлы раздельно и дальше проверять их на совпадения, возможно от этого программа только выиграет. Цитата:
ps: replace(/\[[/]?url\]/g,"") просто вырезает ненужные [url] этого форума |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Gozar, а можно посмотреть ваш вариант в действии?) |
Цитата:
там добавлено: replace(/\[[/]?url\]/g,"") для чистоты эксперимента |
Цитата:
|
Цитата:
Кстати, в расширенном режиме, внизу есть галка ("Автоматически вставлять ссылки"), которую надо убирать, чтобы не было [url]. |
Цитата:
|
единственно е в чем я согласен, дык это в том что апосля доменного имени ничего кроме слеша не должно быть... тоесть в правило нужно добавить исключение что бы такие http://google.ru-blah домены он не ел... а если ссылка указана так: http://google.ru/-blah то это полноценная ссыль
|
Цитата:
|
Хотя этот ответ скорее относится devote ;)
|
Gozar, "http://testdomen/blabla/" - не заматчило - это by design?
devote, просто сделать выбор - матчить дефис или нет. :D Каждый выбирает по себе) Из примеров, кто не матчит - контакт. Пока не вспомню больше... |
Цитата:
|
Цитата:
|
вот ссылка на этот пост : http://javascript.ru/forum/project/2...tranice-5.html и что ее порезать надо до http://javascript.ru/forum/project/23691 и кому она уже нужна будет?
|
var a = 'Крутая:http://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice-5.html-ссылка'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/|?@&#%a)(-z0-9]+)?(?=\b)/ig); alert(a) |
Discussio mater veritas est. :D
|
Цитата:
а так она не заработает: var a = 'Cool:http://javascript.ru/forum/project/23691-poisk-ssylok-na-stranice-5.html-link'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/|?@&#%a)(-z0-9]+)?(?=\b)/ig); alert(a)Короче что бы тут не говорили, одно регой всеравно все не сделаешь, в любом случае нужно писать еще не одну регу и код, что бы четко определить что к чему. |
devote,
В твоей ссылке вообще невозможно на программном уровне правильно определить сслыку, кроме как перейти по ней и проверить последовательно отсекая символы с конца. Цитата:
|
Gozar,
Я и не пытаюсь что-то доказать, возьмем к примеру ссылку: http://президент.рф/документы если писать ее так http://президент.рф/документы-ссылка понятно дело что не поймешь где ссыль а где нет... Я пример указывал именно в плане трансляции... ибо ссылки бывают на разных языках. |
Цитата:
|
Цитата:
|
Цитата:
|
Короче, то же самое, что и с емейлами… Можно проверять кучей кода, а можно забить и пользоваться простой регой…
|
Цитата:
Хотя если заказчик потребует, то конечно уделю =))) За его то счет))) |
Цитата:
Где-то можно забить на точную проверку, а где-то можно сильно пожалеть о том, что не проверил дополнительной регой или куском программы. Просто тебе не попадались подобные задачи видимо. В некоторых из них подобная проблема стоит на главном месте. |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Собственно весь сыр-бор я поднял из-за того, что на этом форуме меня раздражала рега, которая не умеет распознавать знаки препинания в конце url.
Известно что в js отсутствует ретроспективная проверка, поэтому я тут изголился и придумал следующее: split("").reverse().join("")и тогда можно снова проверять сначала, то есть это и будет ретроспективная проверка, затем снова реверс и всё ок. Потом мне стало интересно, неужели никто до этого не допёр и не мучился с подобным, оказалось этому даже название есть: Mimicking lookbehind through reversal |
Вот начирикал последний вариант, удаляет знаки препинания и вские там символы в конце ссылки...
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); } |
Ну хоть такая рега покатит вам? Щас она убивает знаки препинания не нужные в конце ссыли. И реверсов не надо делать.
|
хотя есть ссылки содержащие имя пользователя и пароль в ссылке, для этого можно убрать из запрещенных два символа ":@" тоесть двоеточие и сабаку.
примерно так: 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); |
devote,
Всё хорошо, за исключением того, что это http://дердымцопцоп она найти не должна была. Спасибо за участие. Твоей регой можно будет прогонять ссылку как дополнительным фильтром, без реверса. Хотя возможно это не потребуется, если немного изменить первую часть. |
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); } |
Цитата:
Первую регу может завтра выложу, попробую сократить твою. Идею твою я понял и рега должна получиться короче. |
Вот полностью законченный вариант, ну по крайней мере на мой взгляд, можно смело юзать.
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); } |
номера портов добавил... про них то я подзабыл)))
|
А теперь ещё придумайте как оборачивать такие ссылки:
http://<u>www.<b>google</b>.ru</u>/#q=trololo*trollface.jpg* |
replace(/<\/?\S*?>/g)
|
Часовой пояс GMT +3, время: 05:21. |