Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.07.2012, 00:55
Новичок на форуме
Отправить личное сообщение для Overflow Посмотреть профиль Найти все сообщения от Overflow
 
Регистрация: 30.06.2012
Сообщений: 6

nerv_,
Оптимизация Зачем делать в 2 операции то, что можно сделать в одну. А, так званый, "быдлокод" всегда можно успеть писать)
Ответить с цитированием
  #12 (permalink)  
Старый 02.07.2012, 19:20
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

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

Последний раз редактировалось oneguy, 02.07.2012 в 19:30.
Ответить с цитированием
  #13 (permalink)  
Старый 10.07.2012, 20:51
Новичок на форуме
Отправить личное сообщение для Overflow Посмотреть профиль Найти все сообщения от Overflow
 
Регистрация: 30.06.2012
Сообщений: 6

Сообщение от oneguy Посмотреть сообщение
в первом случае подвыражение (?:http:\/\/)? ловит "http://", во втором случае (?:\:\/\/)? ловит ""
хм.. а почему во втором случае (?:\:\/\/)? ловит "", а не "://"?
Ответить с цитированием
  #14 (permalink)  
Старый 10.07.2012, 20:57
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от Overflow
хм.. а почему во втором случае (?:\:\/\/)? ловит "", а не "://"?
Потому что поиск идёт с 0-го индекса, а там символ "h", а не ":". При этом поиск с 0-го индекса оказывается удачным, поэтому интерпретатор пропускает всю найденную подстроку.

Последний раз редактировалось oneguy, 10.07.2012 в 21:09.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста с помощью регулярных выражений Worker Javascript под браузер 7 10.03.2011 10:08
Создание фильтра базы ссылок с помощью регулярных выражений SvetozarPNZ Events/DOM/Window 8 28.10.2010 13:15
Логика работы ajax-php runekill AJAX и COMET 0 17.03.2010 15:07
Тестер регулярных выражений Riim Ваши сайты и скрипты 9 07.03.2010 09:21
Изменить таг с помощью регулярных выражений alexKniaz Общие вопросы Javascript 1 28.10.2008 17:38