Сообщение от 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.