Парсинг линков в стринге.
Запись от 3p.station размещена 03.08.2011 в 21:40
Тема супер простая, однако пришлось потратить часов 5 пока не пришел к более-менее нормальному результату.
Следующий код парсит и заменяет человеческие линки на html-линки.
private function replaceLinks(str:String):String { var string:String = str; var regLinksHTTP:RegExp = /(ftp:\/\/|http:\/\/|https:\/\/)([\.[:alnum:]_-]){0,4}([[:alnum:]_-]+\.)([[:alnum:]_-]\.?)([[:alpha:]]){0,3}+[\S]*(?<![^\w\/])/g; var regLinksWWW:RegExp = /[^\/](www)([\.[:alnum:]_-]){0,4}([[:alnum:]_-]+\.)([[:alnum:]_-]\.?)([[:alpha:]]){0,3}+[\S]*(?<![^\w\/])/g; var regEmail:RegExp = /[a-z0-9!#$%&'*+\/\=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g; string = string.replace(regLinksHTTP, "<a href='$&' target='blank'>$&</a>"); string = string.replace(regLinksWWW, "<a href='http://$&' target='blank'>$&</a>"); string = string.replace(regEmail, "<a href='mailto:$&'>$&</a>"); return string; }
Всего комментариев 17
Комментарии
![]() ![]() |
|
Особо не вникал, но разве там в Community не нашлось подходящего варианта?
|
![]() ![]() |
|
да, там есть различные паттерны и их много, но не один меня не удовлетворил полностью ( :
|
![]() ![]() |
|
Обновил(-а) Elff 03.08.2011 в 23:48
|
![]() ![]() |
|
Вы, меня извените, но зачем это надо?
![]() |
![]() ![]() |
|
Elff, попробуйте обработать вашим методом например строку "www.google.com" и флеш перейдет на локальный адрес www, которого нет. или попробуйте передать такую стрингу " привет! перейди по этой ссылке www.google.com"
t4arty, например для текстового чата. мой вариант обрабатывает также когда в конце ссылки может стоять точка или запятая, но если чтоит точка или запятая в самой ссылке, то проблем нет : "привет! зайди на мой сайт www.google.com. или на www.google.com/somestring.somestring" |
![]() ![]() |
|
Я вот тоже не понимаю где вообще это может пригодится? В жизни ни разу не встречал хоть и сделал оч много проектов разных типов
![]() |
![]() ![]() |
|
я же написал - текстовый чат.
|
![]() ![]() |
|
Зашибись регулярка. Возьму на заметку.
|
![]() ![]() |
|
Подскажите, что такое "человеческий линк".
|
![]() ![]() |
|
Спасибо, пригодится.
|
![]() ![]() |
|
dimarik, думаю можно на ты
![]() наврено не совсем подходящее выражение. Имелось ввиду ссылка введеная человеком без обрамления тегом <a>, например http://www.google.com или www.flasher.ru. Вот в послденем примере точка не должна попасть в тег <a>. а в этом случае: www.flasher.ru/somestring.somestrin точка принимается как часть урла. также "ловим" если юзер ввел эмейл. Общее применение - подключаем css к текстовому полю и имеем все ссылки в кликабельном html виде. |
![]() ![]() |
|
прикольно, еще бы добавить валидацию киррилических доменов)
а то пока нигде не работает) домен.рф |
![]() ![]() |
|
и кроме ftp:\/\/|http:\/\/|https: есть еще svn, git, ssh,rtmp итп протоколы, хотя они довольно специфичные и вряд ли нужны.
Кроме того ссылка domen.smth не должна прокатить - надо делать валидацию по доменам первого уровня) А просто domen.com не пройдёт как ссылка - без www |
|
Обновил(-а) Котяра 05.08.2011 в 00:10
|
![]() ![]() |
|
да, можно опционально добавить еще разные префиксы. по поводу domen.smth - вот тут то и сложность. тоесть добавлять тогда уже и .рф придется.
|
![]() ![]() |
|
3p.station, извините за глупую шутку, был нетрезв (
|
![]() ![]() |
|
аа, теперь понятненько нормас. я сначала так и подумал, но решил подстраховаться
![]() |
![]() ![]() |
|
3p.station, про точку после адреса спорно. Любой адрес должен быть введен с точкой в конце: www.flasher.ru.
Это домен нулевого уровня. Просто для удобства пользователей все браузеры позволяют вводить эту точку опционально. in4core, Вы видите это каждый день здесь на форуме. Например, http://www.google.ru. Я просто ввёл адрес, но при постинге он перестал быть просты текстом и стал ссылкой, на которую Вы можете кликнуть. dimarik, это понятие близкое к ЧПУ, но относящиеся к линкам. Проще говоря ссылки, на которые можно кликнуть и сразу перейти по адресу. Тебя беспокоит что это не общепринятый термин или ты действительно не понял о чем речь? |
Последние записи от 3p.station
- Спиннер. Кому лень писать. (12.06.2013)
- AIR. Показываем видео HD на несколько экранов (24.04.2013)
- Парсинг линков в стринге. (03.08.2011)
- автоотправка событий (24.05.2011)
- Список актуальных камер юзера. (11.03.2011)