Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2010, 21:19
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

Регулярные выражения работают через раз
Добрый вечер!
Возникла проблема:
Есть вот такой массив регулярок (проверяет ссылки на принадлежность к файлообменникам):
var pattern=[
/https{0,1}:\/\/(www.){0,1}rapidshare.com\/.*/gi ,
/https{0,1}:\/\/(www.){0,1}letitbit.net\/.*/gi
]

Выполняю один и тот же код в разной последовательности:

ab
var a="http://www.rapidshare.com/files/421054723/Avatar.2010.DVD5.part01.rar";
var b="http://www.rapidshare.com/files/421054763/Avatar.2010.DVD5.part02.rar";
if(pattern[0].test(a)){alert(a);}
if(pattern[0].test(b)){alert(b);}

Выводится только переменная a;

ba
var a="http://www.rapidshare.com/files/421054723/Avatar.2010.DVD5.part01.rar";
var b="http://www.rapidshare.com/files/421054763/Avatar.2010.DVD5.part02.rar";
if(pattern[0].test(b)){alert(b);}
if(pattern[0].test(a)){alert(a);}

Выводится только переменная b;

Хотя по логике должны выводиться обе переменные, только в разной последовательности.
Но выходит что регулярка работает при первой проверке, но не работает при второй. Более того, они работают при нечетных проверках, и не работают при четных (проверял практически)!
В чем проблема, чего я не понимаю? Помогите пожалуйста!!!
Спасибо!!!
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2010, 21:38
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,234

а что по вашему должен делать модификатор g?
раз уж используете его, то и почитали бы как именно он работает
http://javascript.ru/RegExp/lastIndex
http://javascript.ru/tutorial/regexp-specials#nayti-vse
Ответить с цитированием
  #3 (permalink)  
Старый 04.10.2010, 21:53
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

Да, убрал модификатор g и все заработало! Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 04.10.2010, 21:59
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

У вас во-первых в выражении указан протокол 'https', во-вторых, названия всех файлообменников как-правило уникальны и можно значительно сократить выражение...

Можно же все проще сделать:
var str = ['http://rapidshare.com', 'http://letitbit.net', 'http://ifolder.ru']
var reg = /rapidshare|letitbit|ifolder/;
for(i=0; i<str.length; i++){
    if(reg.test(str[i])){
         alert(str[i]);
    }
}

Ну а относительно вашего примера:
var pattern=[/rapidshare/]
var b="http://www.rapidshare.com/files/421054763/Avatar.2010.DVD5.part02.rar";
var a="http://www.rapidshare.com/files/421054723/Avatar.2010.DVD5.part01.rar";
if(pattern[0].test(a)){alert(a);}
if(pattern[0].test(b)){alert(b);}

Последний раз редактировалось monolithed, 04.10.2010 в 22:17.
Ответить с цитированием
  #5 (permalink)  
Старый 04.10.2010, 22:56
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

monolithed
В моем регулярном выражении
/https{0,1}:\/\/(www.){0,1}rapidshare.com\/.*/i

https{0,1} говорит о том, что http встречается обязательно, а s - 0 или 1 раз. То есть тут охвачен и http и https.
Действительно можно упростить регулярку, но на разных сайтах встречаются ссылки разного вида (с www и без), и к тому же могут встретиться ссылки, содержащие названия файлообменника, а вести на какой-то сайт.
Если честно, то начал с самого простого, а на этапе тестирования пришлось усложнить
Спасибо за участие в дискуссии
Ответить с цитированием
  #6 (permalink)  
Старый 05.10.2010, 00:50
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,635

На последок вставлю свои пять копеек: вместо '{0,1}' юзайте '?' - кошернее.)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения maket Общие вопросы Javascript 3 19.07.2010 21:32
Регулярные выражения в JS igsavenko Общие вопросы Javascript 2 18.05.2010 20:33
выдача всех результатов. регулярные выражения andreevich Общие вопросы Javascript 4 12.05.2010 15:52
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 11:35
регулярные выражения php HelpeR Серверные языки и технологии 5 15.09.2009 20:09