Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение работает не правильно, почему? (https://javascript.ru/forum/misc/52367-regulyarnoe-vyrazhenie-rabotaet-ne-pravilno-pochemu.html)

-BO- 16.12.2014 06:44

Регулярное выражение работает не правильно, почему?
 
Столкнулся с проблемой: вот таким регулярным выражением в коде -> (?:г\. |г\.).*?(?:\,| ) пытаюсь найти название города по предшествующему набору символов "г." или "г. " в такой строке -> "Адрес: 119 296, Проспект Вернадского 7 E-mail: moscowcircus@mail.ru Телефон: (495) 930-13-26; факс (095) 930-43-15" Находит "го 7" (а по идее не должен)
Копирую и вставляю это же выражение и эту же строку в онлайн конструктор "http://regexpal.com/" или "http://www.pcre.ru/eval" - Все работает отлично!
В этой строке "Адрес: 115372, г.Москва ул. Бирюлевская д.49 кор.4, стр 2 E-mail: mag-005@mail.ru Телефон: +7 (495) 655-11-22; 655-11-48" название города находит отлично и в коде и в онлайн конструкторах!
Что же у меня не так?

Код прост:
var reg = new RegExp("(?:г\. |г\.).*?(?:\,| )", "i");
var str1 = "Адрес: 119 296, Проспект Вернадского 7 E-mail: moscowcircus@mail.ru Телефон: (495) 930-13-26; факс (095) 930-43-15";
var str2 = "Адрес: 105264, г. Москва, 9 я парковая д. 41 кв. 27 E-mail: info@valneriz.ru Телефон: (499)367-35-03";
console.log(reg.exec(str1));
console.log(reg.exec(str2));

рони 16.12.2014 09:33

-BO-, читаем доку
Цитата:

Когда регулярное выражение создается при помощи конструктора new RegExp(…), необходимо помнить, что обратные слеши (\) должны экранироваться,
var reg = new RegExp("(?:г\\.\\s*)[^,\\s]+", "i");

-BO- 16.12.2014 10:06

Спасибо учитель Йода! Да прибудет с тобой сила регулярных выражений!


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