JavaScript регулярные выражения
Описание
Класс RegExp в JavaScript представляет собой регулярные выражения – объект, описывающий символьный шаблон. Объекты RegExp, как правило, создаются с помощью специального синтаксиса литералов, представленного ниже, но так же могут быть созданы посредством конструктора RegExp().
Синтаксис
// с помощью специального синтаксиса литералов var regex = /pattern/flags; // с помощью конструктора var regex = new RegExp( "pattern", "flags" ); var regex = new RegExp( /pattern/, "flags" );
Значения параметров:
| Параметр | Описание |
|---|---|
| pattern | Текст регулярного выражения, или начиная с ES5, другого объекта RegExp (или литерала) для копирования. |
| flags | Если указаны, то определяют флаги регулярных выражений для добавления. Значение соответствует строке, содержащей любую комбинацию значений, приведенных ниже в следующем разделе. Необязательное значение. |
Флаги регулярных выражений
| Флаг | Описание |
|---|---|
| g | Позволяет найти все совпадения, а не останавливаться после первого совпадения (global match flag). |
| i | Позволяет выполнить сопоставление без учета регистра (ignore case flag). |
| m | Сопоставление производится по нескольким строкам. Обработка начальных и конечных символов (^ и $) производится по нескольким строкам, то есть сопоставление происходит с началом или концом каждой строки (разделители \n или \r), а не только с началом, или концом всей строки (multiline flag). |
| u | Шаблон будет расценен как последовательность кодовых точек Юникода (unicode flag). |
| y | Сопоставление происходит по индексу на который указывает свойство lastIndex этого регулярного выражения, при этом сопоставление не производиться по более позднему, или раннему индексу (sticky flag). |
Наборы символов
| Символ | Описание |
|---|---|
| [abc] [a-c] [0-9] | Позволяет найти любой символ в скобках. |
| [^abc] [^a-c] [^0-9] | Позволяет найти любой символ за исключением того, или тех, которые находятся в скобках. |
Метасимволы
| Символ | Описание |
|---|---|
| . | Позволяет найти один символ, кроме символа новой строки, или символа конца строки (\n, \r, \u2028 или \u2029). |
| \d | Позволяет найти символ цифры в базовом латинском алфавите. Эквивалентин использованию набору символов [0-9]. |
| \D | Позволяет найти любой символ, который не является цифрой в базовом латинском алфавите. Эквивалентен набору символов [^0-9]. |
| \s | Позволяет найти одиночный пробельный символ. Под пробельным символом понимается пробел, табуляция, перевод страницы, перевод строки и другие пробельные символы Юникода. Эквивалентен набору символов [\f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]. |
| \S | Позволяет найти одиночный символ, который не является пробельным. Под пробельным символом понимается пробел, табуляция, перевод страницы, перевод строки и другие пробельные символы Юникода. Эквивалентен набору символов [^ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]. |
| [\b] | Позволяет найти символ backspace (специальный символ \b, U+0008). |
| \0 | Позволяет найти символ 0 (ноль). |
| \n | Позволяет найти символ новой строки. |
| \f | Позволяет найти символ перевода страницы. |
| \r | Позволяет найти символ возврата каретки. |
| \t | Позволяет найти символ горизонтальной табуляции. |
| \v | Позволяет найти символ вертикальной табуляции. |
| \w | Позволяет найти любой буквенно-цифровой символ базового латинского алфавита, включая подчеркивание. Эквивалентен набору символов [A-Za-z0-9_]. |
| \W | Позволяет найти любой символ, который не является символом из базового латинского алфавита. Эквивалентен набору символов [^a-Za-z0-9_]. |
| \cX | Позволяет найти контрольный символ в строке. Где X - буква от A до Z. Например, /\cM/ обозначает символ Ctrl-M. |
| \xhh | Позволяет найти символ, используя шестнадцатеричное значение (hh - двухзначное шестнадцатеричное значение). |
| \uhhhh | Позволяет найти символ, используя кодировку UTF-16 (hhhh - четырехзначное шестнадцатеричное значение). |
| \u{hhhh} или \u{hhhhh} | Позволяет найти символ со значением Юникода U+hhhh или U+hhhhh (шестнадцатеричное значение). Только когда задан флаг u. |
| \ | Указывает, что следующий символ является специальным и не должен интерпретироваться буквально. Для символов, которые обычно трактуются специальным образом, указывает, что следующий символ не является специальным и должен интерпретироваться буквально. |
Ограничения
| Символ | Описание |
|---|---|
| ^ | Сопостовление производится с символом в начале строки (ввода). Если флаг m (multiline flag) указан, то сопоставление также произодится с позицией следующей за символом переноса строки. |
| $ | Сопостовление производится с символом в конце строки (ввода). Если флаг m (multiline flag) указан, то сопоставление также произодится с позицией следующей перед символом переноса строки. |
| \b | Позволяет выполнить поиск соответствия в начале или конце слова (например, позиция между буквой и пробелом). |
| \B | Позволяет выполнить поиск соответствия не в начале или конце слова. |
Квантификаторы
| Символ | Описание |
|---|---|
| n* | Сопостовление происходит с любой строкой, содержащей ноль или более вхождений символа n. |
| n+ | Сопостовление происходит с любой строкой, содержащей хотя бы один символ n. |
| n? | Сопостовление происходит с любой строкой с предшествующим элементом n ноль или один раз. |
| n{x} | Соответствует любой строке, содержащей последовательность символов n определенное количество раз x. X должно быть целым положительным числом. |
| n{x,} | Соответствует любой строке, содержащей по крайней мере x вхождений предшествующего элемента n. X должно быть целым положительным числом. |
| n{x, y} | Соответствует любой строке, содержащей по крайней мере x, но не более, чем с y вхождениями предшествующего элемента n. X и y должны быть целыми положительными числами. |
| n*? n+? n?? n{x}? n{x,}? n{x,y}? | Сопостовление происходит по аналогии с квантификаторами *, +, ? и {...}, однако при этом поиск идет минимально возможного сопоставления. По умолчанию используется "жадный" режим, ? в конце квантификатора позволяет задать "нежадный" режим при котором повторение сопоставления происходит минимально возможное количество раз. |
| x(?=y) | Позволяет сопоставить x, только если за x следует y. |
| x(?!y) | Позволяет сопоставить x, только если за x не следует y. |
| x|y | Сопоставление происходит с любой из указанных альтернатив. |
Группировка и обратные ссылки
| Символ | Описание |
|---|---|
| (x) | Позволяет найти символ x и запомнить результат сопоставления ("захватывающие скобки"). Сопоставленная подстрока может быть вызвана из элементов результирующего массива [1]..., [n], или из свойств предопределенного объекта RegExp $1 ..., $9. |
| (?:x) | Позволяет найти символ x, но не запоминать результат сопоставления ("незахватывающие скобки"). Сопоставленная подстрока не может быть вызвана из элементов результирующего массива [1]..., [n], или из свойств предопределенного объекта RegExp $1 ..., $9. |
| \n | Обратная ссылка на последнюю подстроку, совпадающую с n-ой по счёту в круглых скобках в регулярном выражении (нумерация скобок идет слева направо). n должно быть целым положительным числом. |