Регулярные выражения — мощный способ поиска и замены строк. Они существуют во многих языках.
В JavaScript используется упрощённый синтаксис, похожий на стандарт PCRE.
Введение
Регулярные выражения –- мощное средство поиска и замены в строке. В JavaScript регулярные выражения встроены в методы поиска (search), выявления совпадений (match) и замены в строке (replace).
Символьные классы
Допустим, нам нужно найти цифру в строке. Не какую-то конкретную, а просто любую цифру.
Можно, конечно, сделать 10 попыток — искать сначала "0", потом "1", "2" и так далее, но регулярные выражения позволяют решить задачу более изящно.
Специальные символы
Ряд символов в регулярных выражениях имеет особое значение: [ \ ^ $ . | ? * + ( ).
Они используются, чтобы расширить возможности поиска. Не пытайтесь запомнить список — когда мы разберёмся с ними, он запомнится сам собой.
Чтобы использовать специальный символ в качестве обычного, он должен быть экранирован. Или, другими словаии, перед символом должен быть обратный слэш '\'.
Например, нам нужно найти точку '.'.
Наборы и диапазоны символов
Несколько символов или символьных классов можно сгруппировать в квадратные скобки […] Такая группировка означает «искать любой символ из указанных в […]».
Например, [еао] означает любой символ из этих трёх: 'а', 'е', или 'о'.
Цифровые квантификаторы
Скажем, нам нужно найти трёхзначное число. Это просто сделать с помощью \d:
showMatch( "Мне 100 лет", /\d\d\d/ ) // 100
Но давайте пойдём дальше. Что, если нам нужно найти пятизначное число? Неужели придётся повторять \d пять раз: \d\d\d\d\d?
К счастью, есть более красивое решение.
Quantifiers +, * and ?
There are short quantifiers '+', '*' and '?', which are used very widely.
Basically, they are convenient shortcuts for numeric quantifiers:
Greedy and Lazy
Ahchors and multiline mode
Word boundary
Another position check is a word boundary \b. It doesn’t match a character, but matches in situations when a wordly character follows a non-wordly or vice versa. A «non-wordly» may also be text start or end.
Infinite backtracking problem
The backtracking nature of regular expressions in JavaScript (and most other languages which use same type of regexp processing) may lead extremely long or almost infinite searching time.
Groups
A part of the regular expression can be grouped together in brackets (...).
Quantifiers are applied to whole group instead of just one char.
Alternation
Alternation is denoted by the vertical line '|'. It allows to choose between multiple variants.
Regular expressions methods
Practice
Here you found tasks which help in understanding regexp construction principles.
Комментарии
- Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
- Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
- Комментарии без смысла, с рекламой или не о статье вообще - удаляются.