Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.07.2009, 19:52
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

просто чем отличаются эти два варианта: тем, что жадная регулярка сначала найдет самое жадное совпадение. Что общего: обе регулярки будут для каждого символа проверять шаблон, жадная - с конца, нежадная - с начала. Т.е. расклады могут быть разные. Так что имхо неочевидно, что быстрее
Ответить с цитированием
  #12 (permalink)  
Старый 23.07.2009, 20:40
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от x-yuri
Так что имхо неочевидно, что быстрее
Если еще немного подумать, то не жадная 100% медленней.
Ответить с цитированием
  #13 (permalink)  
Старый 24.07.2009, 14:03
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

x-yuri, +1

Из вики:
Цитата:
Разница в реализации

При необходимости обработать жадный элемент шаблона, парсер начинает поиск соответствия с конца обрабатываемой строки; при обработке нежадного элемента, проверка производится с текущего места обработки строки до первого несоответствия.
Жадные будут быстрее далеко не всегда. Например, тут:
/a[\w\d]*\d/.test('a1bcdefghjk') -- схватили первое 'a', потом залезли в конец и начали отматывать аж до 'b'. Нежадный схватил бы пустую строку, не нашел за ней цифру, взял 'b' и готово.
Ответить с цитированием
  #14 (permalink)  
Старый 24.07.2009, 14:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от e1f
парсер начинает поиск соответствия с конца обрабатываемой строки
Что за бред? Это было бы логично только для .* с модификатором m.
Ответить с цитированием
  #15 (permalink)  
Старый 24.07.2009, 15:01
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от e1f
схватили первое 'a'
Все так.

Сообщение от e1f
потом залезли в конец
Верно.

Сообщение от e1f
начали отматывать аж до 'b'
А вот здесь никуда ничего не отматывается, здесь конец строки не соответствует куску \d и регулярка выдает false.


Сообщение от e1f
Нежадный схватил бы пустую строку, не нашел за ней цифру, взял 'b' и готово.
Здесь сначала берется первое "а", затем \d успешно примеряется к "1" и раз успешно, то куску [\w\d]*? ничего не достается, т. е. соответствие найдено и результат true.

А раз результаты на тестируемом тексте разные, значит сравнивать производительность таким тестом не корректно.

Сообщение от e1f
Из вики:
Кто-то с похмелья туда написал.
Ответить с цитированием
  #16 (permalink)  
Старый 24.07.2009, 16:23
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Результаты разные? А запускать не пробовали?
>>> /a[\w\d]*\d/.test('a1bcdefghjk')
true
>>> /a[\w\d]*?\d/.test('a1bcdefghjk')
true

В варианте 2 и Вы, и я сказали то же самое А вот в варианте 1 именно отматывается
Kolyaj,
Цитата:
парсер начинает поиск соответствия с конца обрабатываемой строки
здесь неточно. имеется в виду с конца максимального совпадения на данном этапе. То есть /a.*b/.test('ab11111111111111111...') отхватит все с b до конца, и только потом начнет обратно ползти
Ответить с цитированием
  #17 (permalink)  
Старый 24.07.2009, 16:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Конец максимального совпадения тоже еще найти надо. Но вы правы в том, что нужно просто знать, где какой квантификатор использовать.

Последний раз редактировалось Kolyaj, 24.07.2009 в 16:27.
Ответить с цитированием
  #18 (permalink)  
Старый 24.07.2009, 17:00
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от e1f
начнет обратно ползти
И правда, назад еще ползает .
Ладно, сдаюсь .
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вырезать часть хтмл Alexxx Общие вопросы Javascript 2 20.06.2009 04:23
Имя файла регуляркой greatilya Общие вопросы Javascript 2 05.03.2009 11:04
Помогите с регуляркой... alexKniaz AJAX и COMET 0 03.11.2008 00:16