поиск ссылок на странице
Решил написать более-менее вменяемую регу для нахождения ссылок на странице, русские символы не брал в расчет, домены тоже указаны специально точные.
var a = 'ссылка на карту google maps http://maps.google.ru/maps/pre-fix/фыва'. match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net)([-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/i); alert(a[0]); Будет желание тестим наздоровье. Очень хорошо если кто-то найдет непроходящий проверку урл. Получит плюшку и мишку в подарок, от бондюэль(требовать в любом магазине бондюэль) :) |
к чему это? то есть что ты этим хочешь показать? мол учите PRCE дети =)))
|
devote,
Мне интересно только то что я написал, не более того. Никакого сарказма и насмешек нет. Мне самому нужна подобная рега, вот и написал. Цитата:
|
Gozar,
ну ясно, просто рега не особо универсальна, она будет требовать изменений, ибо домены верхнего уровня есть не только ru, com, net... |
Цитата:
|
и да ссылки такого вида: http://maps.google.ru./maps/pre-fix/фыва тоже никто не запрещает юзать
|
devote,
Бесишь: Цитата:
|
да я не про русские символы... не бесись, яж не пытаюсь разозлить, лишь пытаюсь найти ошибку.... Я про точку, в конце домена... хотя как вижу с ней все норм пашет.
|
вот, верхний твой вариант, нижний мой:
var a = 'ссылка на карту google.ru.maps [url]http://maps.google.ru/maps/pre-fix/фыва[/url] бла тест'. match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net)([-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/i); alert(a[0]); var a = 'ссылка на карту google.ru.maps [url]http://maps.google.ru/maps/pre-fix/фыва[/url] бла тест'. match( /((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i ); alert(a[0]); |
скрипт на этом сайте, зачем-то в коде добавил теги URL но думаю разберетесь
|
Цитата:
Спасибо, добавил провеку на точку в конце: var a='ссылка на карту google.ru.maps выф[url]http://maps.google.ru/maps/pre-fix/фыва[/url] бла тест'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/ig); alert(a); |
Твой вариант(найдена одна, ни одна из первых не найдена), также смотри на окончание
var a = 'ссылка на карту google.ru.maps maps.google.ru/maps/pre-fix/фыва бла тест ссылка на картуhttp://maps.google.ru/maps/place?q=59.944215,30.307012,блатест'.match( /((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i ); alert(a); Мой вариант(найдено три) var a = 'ссылка на карту google.ru.maps maps.google.ru/maps/pre-fix/фыва бла тест ссылка на картуhttp://maps.google.ru/maps/place?q=59.944215,30.307012,блатест'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/ig); alert(a); |
ну просто я не учитываю ссылки которые без http:// или без www. так как по сути это не может расцениваться ссылкой... хоть и по читабельности оно так и есть... нашел он то что реально писано ссылкой... и окончание у меня нормальное... тоесть русские символы так же имеют право быть внутри юрл.. тоесть у меня все в ссылке до пробела... единственное что нужно запретить это перед ссылкой если нет пробела, то не считать ее ссылкой.
тоесть так не найдет: var a = 'ссылка на карту google.ru.maps maps.google.ru/maps/pre-fix/фыва бла тест ссылка на картуhttp://maps.google.ru/maps/place?q=59.944215,30.307012,блатест'.match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i ); alert(a); а так найдет: var a = 'ссылка на карту google.ru.maps maps.google.ru/maps/pre-fix/фыва бла тест ссылка на карту http://maps.google.ru/maps/place?q=59.944215,30.307012,блатест'.match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i ); alert(a); |
Цитата:
И почему должна быть запрещена ссылка вида //'ссылка:http://ya.ru?' |
Цитата:
|
Цитата:
|
Видишь знак вопросика в конце ссылки?
У тебя также. |
Твой вариант:
var a = 'ссылка на карту бла тест ссылка на эта ссылка: [url]http://maps.google.ru/maps/place?q=59.944215,30.307012?[/url] ,блатест'.match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i );alert(a); Баг форума, у тебя на самом деле возвращает тот же урл, но в конце у него знак вопроса. Мой вариант: var a = 'ссылка на карту бла тест ссылка на эта ссылка: [url]http://maps.google.ru/maps/place?q=59.944215,30.307012?[/url] ,блатест'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/ig);alert(a); |
а что плохого в том что знак вопроса попал в ссылку? как мне говорит PHP тык он не против иметь хоть двадцать вопросов в ссылке, в переменной $_SERVER['REQUEST_URI'] отобразить хоть сотню... так что я могу спокойно писать сайт с учетом подобных ссылок.
|
зы: ты экранируешь точку в символьном классе:
[quote=devote;140366] [^\.] а зачем? |
Цитата:
|
[quote=Gozar]зы: ты экранируешь точку в символьном классе:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
вот для примера есть гугловская ссылка:
мой: var a = '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'.match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i );alert(a); вот как примет ее твоя рега, в ней же и точки и куча борохла: var a = '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'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/?@&#%a-z0-9]+)?(\/|\b)/ig);alert(a); |
Цитата:
|
Цитата:
var a='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,'.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/|?@&#%a-z0-9]+)?(\/|\b)/ig); alert(a); |
Оговорюсь, что я не ставлю цель доказать что моя рега лучше или хуже. Только сравнительные характеристики, виды урлов и их контекст и выбор наиболее оптимального варианта.
|
Цитата:
var a = '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,'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.(?:[^\s,]+)/ig ); alert(a); |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
http://maps.google.ru./ как собственно и ты. или вот такие: http://www.ya.рф |
Цитата:
|
|
http://дердымцопцоп,.ru/ ну или просто http://ru,.ru/
проверь свою регу. а моя не проходит: http://..ru/ |
не находит:
var a = 'http://..ru/'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.(?:[^\s,]+)/ig ); alert(a); находит: var a = 'http://ru,.ru/'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^\.]+)\.(?:[^\s,]+)/ig ); alert(a); исправленная: var a = 'http://ru,.ru/'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^.,]+)\.(?:[^\s,]+)/ig ); alert(a); исправленная (русская ссылка): var a = 'http://ру.ru/'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^.,]+)\.(?:[^\s,]+)/ig ); alert(a); |
возможно эта ссылка будет в тему
|
Хочу плюшку!
var a = 'http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg'; //ссыль реальная has= a.match(/(http(s)?:\/\/)?(www\.)?([-.a-z0-9]+)\.(ru|com|net){1}((\/)+[-$_.,+=:;/|?@&#%a-z0-9]+)?(\/|\b)/ig); alert(has.join('\n\n')); Рега вроде последняя, какую нашёл. P. S. Но в принципе, это подлая ссылка. На моей памяти ещё ни одна рега её не заматчила нормально. |
Цитата:
var a = 'http://votrube.ru/uploads/posts/2011-12/1322827006_-(www.votrube.ru)2.jpg'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^.,]+)\.(?:[^\s,]+)/ig ); alert(a); |
devote, на самом деле, более хорошим решением (на мой взгляд) будет не заматчивание этой ссылки. Потому что далеко не все люди ставят пробелы перед дефисом, как это не печально:
var a = 'http://yandex.ru-хорошая ссылка'. match( /(?:^|[\s]+)((http(s)?:\/\/)|(www\.))([^.,]+)\.(?:[^\s,]+)/ig ); alert(a); |
Часовой пояс GMT +3, время: 13:03. |