Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Логика регулярных выражений (https://javascript.ru/forum/events/29495-logika-regulyarnykh-vyrazhenijj.html)

Overflow 02.07.2012 00:55

nerv_,
Оптимизация :) Зачем делать в 2 операции то, что можно сделать в одну. А, так званый, "быдлокод" всегда можно успеть писать)

oneguy 02.07.2012 19:20

Цитата:

Сообщение от Overflow
Спасибо за ответ! Не подскажите, почему часть с http
str2=str.replace(/(?:http:\/\/)?(.*)\.(jpg|jpeg|png|bmp|gif).*$/ig,'$1.$2'); //

работает на ура, а с отслеживанием "://" без символов букв
str2=str.replace(/(?:\:\/\/)?(.*)\.(jpg|jpeg|png|bmp|gif).*$/ig,'$1.$2'); //

"бракует" ("http://" помещается в $1, первая группировка её не видит)? Интересует именно почему :// игнорируются первым группированием, а если группировать http:// - то нет.

Потому, что как в первом, так и во втором случае регулярка подходит с 0-го индекса, в первом случае подвыражение (?:http:\/\/)? ловит "http://", во втором случае (?:\:\/\/)? ловит "", то есть квантификатор сработал на 0.
Здесь важный момент: все возможности для подвыражения с квантификатором проверяются вначале, лишь если от текущего индекса ничего не нашлось, интерпретатор начинает искать со следующего индекса.
Цитата:

Сообщение от devote
потому что вы делаете replace а не match

Этот ответ неправильный, так как match ловит те же самые подстроки, что и replace.

Overflow 10.07.2012 20:51

Цитата:

Сообщение от oneguy (Сообщение 185884)
в первом случае подвыражение (?:http:\/\/)? ловит "http://", во втором случае (?:\:\/\/)? ловит ""

хм.. а почему во втором случае (?:\:\/\/)? ловит "", а не "://"?

oneguy 10.07.2012 20:57

Цитата:

Сообщение от Overflow
хм.. а почему во втором случае (?:\:\/\/)? ловит "", а не "://"?

Потому что поиск идёт с 0-го индекса, а там символ "h", а не ":". При этом поиск с 0-го индекса оказывается удачным, поэтому интерпретатор пропускает всю найденную подстроку.


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