Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка определения главной страницы (https://javascript.ru/forum/misc/36375-regulyarka-opredeleniya-glavnojj-stranicy.html)

Magneto 13.03.2013 15:29

Регулярка определения главной страницы
 
Нужно регулярное выражение которое определит главную страницу сайта. При этом интересуют только те главные страницы которые оканчиваются на '/', тоесть:
Код:

http://habrahabr.ru/
https://www.google.com.ua/
http://mail.ru/
http://www.yandex.ua/

, а все другие нужно игнорировать, например:
Код:

http://habrahabr.ru/index.php
https://www.google.com.ua/start/
http://mail.ru/glavnaya.html
http://www.yandex.ua/#indexpage

Что имею сейчас:
var reg = /^https?:\/\/\S*?(\/)/;

Это регулярное выражение возвращает(находит) '/' во всех выше перечисленных сайтах, а нужно чтоб только в первых 4.
Я конечно пробовал указать '$' чтоб типа искало только когда '/' последний, но не работает.

Deff 13.03.2013 15:42

url = 'http://www.yandex.ua/#yandex'
tst = url.split(/:\/\/[^\/]*\//);
if(tst[1]=='')alert('Главная, без дополнений');
if(tst[1]!='')alert('>'+tst[1]+'<');

Magneto 13.03.2013 15:53

Цитата:

Сообщение от Deff (Сообщение 240406)
url = 'http://www.yandex.ua/#yandex'
tst = url.split(/:\/\/[^\/]*\//);
if(tst[1]=='')alert('Главная, без дополнений');
if(tst[1]!='')alert('>'+tst[1]+'<');

Отлично, а теперь мне нужно одним регулярным выражением возвращать следующее:
Код:

http://google.com/webhp?....      ->  /webhp

http://google.com/search?...      ->  /search

http://google.com/#....          ->  /#

http://google.com/                ->  /

http://google.com/...            -> ничего
http://google.com/.../            -> ничего

и для прочих адресов ничего не возвращать
google.com для примера, может быть и другой домен


Deff 13.03.2013 15:57

url = 'http://www.yandex.ua/search?...'
tst = url.split(/:?[\/]+/);
var out=tst[2].split("?")[0];
if(out=='')out='/'
if(out!=tst[2]&&(out=='webhp'||out=='search'||out.indexOf('#')==0||out=='/')) {
alert('>'+out+'<');
}

rgl 13.03.2013 16:17

Цитата:

Сообщение от Deff (Сообщение 240406)
url = 'http://www.yandex.ua/#yandex'
tst = url.split(/:\/\/[^\/]*\//);
if(tst[1]=='')alert('Главная, без дополнений');
if(tst[1]!='')alert('>'+tst[1]+'<');

Не везде работает.
Если главная, tst[1] может быть пустой строкой, а может вообще отсутствовать. А undefined не равно пустой строке.
http://javascript.ru/forum/misc/3600...tml#post238235

А зачем вообще split? Проще (и быстрее) просто проверить test-ом или search-ем, только в конец выражения добавть $

Deff 13.03.2013 16:19

url = 'http://www.yandex.ua/'
tst = url.split(/:\/\/[^\/]*\//);
if(tst[1]=='')alert('Главная, без дополнений');
if(tst[1]!='')alert('>'+tst[1]+'<');


url = 'http://www.yand'
tst = url.split(/:\/\/[^\/]*\//);
if(tst[1]=='')alert('Главная, без дополнений');
if(tst[1]!='')alert('>'+tst[1]+'<');

Deff 13.03.2013 16:21

Цитата:

Сообщение от rgl
А зачем вообще split? Проще (и быстрее) просто проверить test-ом или search-ем, только в конец выражения добавть $

:D Ща всё сплитую, мотив весенний такой... потом матчевать буду

Magneto 13.03.2013 19:38

Всем спасибо.

Вот регулярное выражение:
Код:

/^https?:\/\/[^\/]*(\/(?!.)|\/#(?=.*)|\/webhp(?=\?.*)|\/search(?=\?.*))/
которое соответствует всем требованиям:
Код:

http://google.com/webhp?....      ->  /webhp

http://google.com/search?...      ->  /search

http://google.com/#....          ->  /#

http://google.com/                ->  /

http://google.com/...            -> ничего
http://google.com/.../            -> ничего

и для прочих адресов ничего не возвращать
google.com для примера, может быть и другой домен

var
	result,
	pattern = /^https?:\/\/[^\/]*(\/(?!.)|\/#(?=.*)|\/webhp(?=\?.*)|\/search(?=\?.*))/;

result = 'http://google.com/webhp?....'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/search?... '.match( pattern );
alert( result && result[1] );

result = 'http://google.com/#....'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/...'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/.../'.match( pattern );
alert( result && result[1] );

result = 'http://google.com'.match( pattern );
alert( result && result[1] );

рони 13.03.2013 20:15

Magneto,
Вариант...
var	result,
	pattern = /^https?:\/\/[^/]*(\/([^/?.]+|$))/;

result = 'http://google.com/webhp?....'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/search?... '.match( pattern );
alert( result && result[1] );

result = 'http://google.com/#....'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/...'.match( pattern );
alert( result && result[1] );

result = 'http://google.com/.../'.match( pattern );
alert( result && result[1] );

result = 'http://google.com'.match( pattern );
alert( result && result[1] );

Magneto 13.03.2013 20:18

Должна возвращать только webhp или search, на все другие варианты не должна реагировать.

var	result,
	pattern = /^https?:\/\/[^/]*(\/([^/?.]+|$))/;

result = 'http://google.com/aaa?....'.match( pattern );
alert( result && result[1] );


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