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

Gozar 02.12.2011 14:57

Цитата:

Сообщение от devote (Сообщение 140349)
вот ... мой:
var a = 'ссылка на карту google.ru.maps [url]http://maps.google.ru/maps/pre-fix/фыва[/url] бла тест'.
match( /((http(s)?:\/\/)|(www\.))([^\.]+)\.([^\s]+)/i );
alert(a[0]);

google.ru тоже ссылка без maps

Спасибо, добавил провеку на точку в конце:

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);

Gozar 02.12.2011 15:15

Твой вариант(найдена одна, ни одна из первых не найдена), также смотри на окончание
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);

devote 02.12.2011 15:33

ну просто я не учитываю ссылки которые без 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);

Gozar 02.12.2011 15:41

Цитата:

Сообщение от devote (Сообщение 140366)
единственное что нужно запретить

Запретить кому?

И почему должна быть запрещена ссылка вида
//'ссылка:http://ya.ru?'

devote 02.12.2011 15:42

Цитата:

Сообщение от Gozar
Запретить кому?

У меня в регулярке, сорри что не написал подробности... я в посте выше добавил в регу правило что бы перед ссылкой был либо пробел либо начало строки... Тоесть ссылка начинающая с "blahttp://" не может быть ссылкой, это показано в первом примере... а во втором стоит пробел перед ссылкой

devote 02.12.2011 15:42

Цитата:

Сообщение от Gozar
Запретить кому?

И почему должна быть запрещена ссылка вида//ссылка:http://ya.ru?

Хотя да, такие исключения могут быть, не спорю.

Gozar 02.12.2011 15:44

Видишь знак вопросика в конце ссылки?

У тебя также.

Gozar 02.12.2011 15:51

Твой вариант:
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);

devote 02.12.2011 15:56

а что плохого в том что знак вопроса попал в ссылку? как мне говорит PHP тык он не против иметь хоть двадцать вопросов в ссылке, в переменной $_SERVER['REQUEST_URI'] отобразить хоть сотню... так что я могу спокойно писать сайт с учетом подобных ссылок.

Gozar 02.12.2011 15:56

зы: ты экранируешь точку в символьном классе:
[quote=devote;140366]
[^\.]

а зачем?


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