Книга: JavaScript. Подробное руководство, 6-е издание

10.1.3.1. «Нежадное» повторение

10.1.3.1. «Нежадное» повторение

Символы повторения, перечисленные в табл. 10.3, соответствуют максимально возможному количеству повторений, при котором обеспечивается поиск последующих частей регулярного выражения. Мы говорим, что это - «жадное» повторение. Имеется также возможность реализовать повторение, выполняемое «нежадным» способом. Достаточно указать после символа (или символов) повторения вопросительный знак: ??, +?, *? или даже {1,5}?. Например, регулярное выражение /а+/ соответствует одному или более экземплярам буквы а. Примененное к строке «ааа», оно соответствует всем трем буквам. С другой стороны, выражение /а+?/ соответствует одному или более экземплярам буквы а и выбирает наименее возможное число символов. Примененный к той же строке, этот шаблон соответствует только первой букве а.

«Нежадное» повторение не всегда дает ожидаемый результат. Рассмотрим шаблон /а+b/, соответствующий одному или более символам а, за которыми следует символ Ь. Применительно к строке «аааb» ему соответствует вся строка. Теперь проверим «нежадную» версию /а+?b/. Можно было бы подумать, что она должна соответствовать символу b, перед которым стоит только один символ а. В случае применения к той же строке «аааЬ» можно было бы ожидать, что она совпадет с единственным символом а и последним символом b. Однако на самом деле этому шаблону соответствует вся строка, как и в случае «жадной» версии. Дело в том, что поиск по шаблону регулярного выражения выполняется путем нахождения первой позиции в строке, начиная с которой соответствие становится возможным. Так как соответствие возможно, начиная с первого символа строки, более короткие соответствия, начинающиеся с последующих символов, даже не рассматриваются.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.746. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз