Поделиться через


Синтаксис регулярного выражения

Обновлен: Ноябрь 2007

Регулярное выражение — это шаблон текста, состоящий из обычных знаков (например букв от "a" до "z") и специальных знаков, известных как метасимволы. Этот шаблон описывает одну или несколько строк, с которыми выполняется сравнение во время поиска текста.

Примеры регулярных выражений

Выражение

Соответствия

/^\s*$/

Соответствует пустой строке.

/\d{2}-\d{5}/

Проверка номера идентификатора, состоящего из 2 цифр, дефиса и 5 дополнительных цифр.

/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/

Соответствует тегу HTML.

В следующей таблице содержится полный список метасимволов и описывается их поведение в контексте регулярных выражений:

Знак

Описание

\

Помечает следующий знак как специальный знак, литерал, обратную ссылку или восьмеричный escape-знак. Например, "n" соответствует букве "n". "\n" соответствует символу новой строки. Последовательность "\\" соответствует "\", а "\(" соответствует "(".

^

Соответствует позиции в начале входной строки. Если для объекта RegExp установлено свойство Multiline, знак "^" также соответствует позиции, находящейся сразу после "\n" или "\r".

$

Соответствует позиции в конце входной строки. Если для объекта RegExp установлено свойство Multiline, знак "$" также соответствует позиции, находящейся непосредственно перед "\n" или "\r".

*

Соответствует предыдущему символу или части выражения, повторяющимся нуль или более раз. Например, "zo*" соответствует "z" и "zoo". "*" является эквивалентом "{0,}".

+

Соответствует предыдущему символу или части выражения, повторяющимся один или более раз. Например, "zo+" соответствует "zo" и "zoo", но не "z". "+" является эквивалентом "{1,}".

?

Соответствует предыдущему символу или части выражения, повторяющимся нуль или один раз. Например, "do(es)?" соответствует "do" в словах "do" или "does". "?" является эквивалентом "{0,1}".

{n}

n — это неотрицательное целое число. Строго соответствует числу раз, равному n. Например, "o{2}" не соответствует "o" в слове "Bob", но соответствует "oo" в слове "food".

{n,}

n — это неотрицательное целое число. Соответствует числу раз, равному или превышающему n. Например, "o{2,}" не соответствует букве "o" в слове "Bob", но соответствует всем буквам "o" в слове "foooood". "o{1,}" является эквивалентом "o+". "o{0,}" является эквивалентом "o*".

{n,m}

M и n — это неотрицательные целые числа, где n <= m. Соответствует числу раз, равному или превышающему n и не превышающему m. Например, "o{1,3}" соответствует первым трем буквам "o" в слове "fooooood". "o{0,1}" является эквивалентом "o?". Обратите внимание на то, что между запятой и числами нельзя вставлять пробел.

?

Когда данный знак стоит сразу после любых других квантификаторов (*, +, ?, {n}, {n,}, {n,m}), то такой сравниваемый шаблон является нежадным. Нежадный шаблон соответствует минимально возможной части искомой строки, а используемый по умолчанию жадный шаблон соответствует максимально возможной части искомой строки. Например, в строке "oooo" шаблон "o+?" соответствует одной букве "o", а шаблон "o+" соответствует всем буквам "o".

.

Соответствует любому отдельному знаку, кроме "\n". Для получения соответствия любому знаку, включая "\n", используйте шаблон "[\s\S]".

(pattern)

Часть выражения, соответствующая слову pattern и сохраняющая это совпадение. Сохраненное совпадение можно извлечь из полученной коллекции совпадений с помощью свойств $0…$9. Для получения соответствия знакам скобок "(" и ")" используйте "\(" или "\)".

(?:pattern)

Часть выражения, соответствующая слову pattern, но не сохраняющая данной совпадение для использования в дальнейшем. Это удобно использовать для объединения частей шаблона со знаком "или" (|). Например, выражение "industr(?:y|ies)" является более экономичным, чем выражение "industry|industries".

(?=pattern)

Часть выражения, выполняющая поиск с положительным просмотром вперед, который соответствует искомой строке в любой точке, где начинается строка, совпадающая с шаблоном pattern. Это сравнение выполняется без сохранения совпадения для возможного использования в дальнейшем. Например, шаблон "Windows (?=95|98|NT|2000)" соответствует слову "Windows" в последовательности "Windows 2000", но не слову "Windows" в последовательности "Windows 3.1". При поиске вперед знаки не обрабатываются, то есть после нахождения совпадения сразу же начинается поиск следующего совпадения, если только оно не включает знаки, входящие в положительный просмотр вперед.

(?!pattern)

Часть выражения, выполняющая поиск с отрицательным просмотром вперед, который соответствует искомой строке в любой точке, где начинается строка, не совпадающая с шаблоном pattern. Это сравнение выполняется без сохранения совпадения для возможного использования в дальнейшем. Например, шаблон "Windows (?!95|98|NT|2000)" соответствует слову "Windows" в последовательности "Windows 3.1", но не слову "Windows" в последовательности "Windows 2000". При поиске вперед знаки не обрабатываются, то есть после нахождения совпадения сразу же начинается поиск следующего совпадения, если только оно не включает знаки, входящие в положительный просмотр вперед.

x|y

Соответствует букве x или y. Например, "z|food" соответствует букве "z" или слову "food". "(z|f)ood" соответствует слову "zood" или слову "food".

[xyz]

Набор знаков. Совпадает с любым из знаков внутри скобок. Например, "[abc]" соответствует букве "a" в слове "plain".

[^xyz]

Отрицательный набор знаков. Соответствует любому знаку, не указанному в скобках. Например, "[^abc]" соответствует букве "p" в слове "plain".

[a-z]

Диапазон знаков. Соответствует любому знаку в указанном диапазоне. Например, "[a-z]" соответствует любой букве от "a" до "z" в нижнем регистре.

[^a-z]

Отрицательный диапазон знаков. Соответствует любому знаку, отсутствующему в указанном диапазоне. Например, "[^a-z]" соответствует любому знаку, не являющемуся буквой от "a" до "z".

\b

Соответствует границе слова, то есть позиции между словом и пробелом. Например, "er\b" соответствует "er" в слове "never", но не в слове "verb".

\B

Соответствует позиции, отличной от границы слова. Например, "er\B" соответствует "er" в слове "verb", но не в слове "never".

\cx

Соответствует управляющему символу, указанному с помощью x. Например, "\cM" соответствует "Control-M" или знаку возврата каретки. Значение x должно находиться в диапазоне от "A" до "Z" или от "a" до "z". В противном случае "c" считается буквенным символом "c".

\d

Соответствует знаку цифры. Является эквивалентом для "[0-9]".

\D

Соответствует любому знаку, не являющемуся цифрой. Является эквивалентом для "[^0-9]".

\f

Соответствует знаку подачи бланка. Является эквивалентом для "\x0c" и "\cL".

\n

Соответствует символу новой строки. Является эквивалентом для "\x0a" и "\cJ".

\r

Соответствует знаку возврата каретки. Является эквивалентом для "\x0d" и "\cM".

\s

Соответствует знаку пробела, включая пробел, табуляцию, подачу бланка и т. д. Является эквивалентом для "[ \f\n\r\t\v]".

\S

Соответствует любому знаку, не являющемуся пробелом. Является эквивалентом для "[^ \f\n\r\t\v]".

\t

Соответствует знаку табуляции. Является эквивалентом для "\x09" и "\cI".

\v

Соответствует знаку вертикальной табуляции. Является эквивалентом для "\x0b" и "\cK".

\w

Соответствует любому знаку в слове, включая знак подчеркивания. Является эквивалентом для "[A-Za-z0-9_]".

\W

Соответствует любому знаку, не являющемуся цифрой или буквой. Является эквивалентом для "[^A-Za-z0-9_]".

\xn

Соответствует n, где n — шестнадцатеричный escape-знак. Шестнадцатеричные escape-знаки должны иметь длину ровно две цифры. Например, "\x41" соответствует "A". "\x041" является эквивалентом для "\x04" и "1". Позволяет использовать в регулярных выражениях ASCII-коды.

\num

Соответствует num, где num — положительное целое число. Обратная ссылка на сохраненные совпадения. Например, "(.)\1" соответствует двум последовательным одинаковым знакам.

\n

Указывает на обратную ссылку или восьмеричный escape-знак. Если перед \n следует не менее n сохраненных частей выражений, n является обратной ссылкой. В противном случае n является восьмеричным escape-знаком, если n является цифрой в восьмеричном формате (0 – 7).

\nm

Указывает на обратную ссылку или восьмеричный escape-знак. Если перед \nm следует не менее nm сохраненных частей выражений, nm является обратной ссылкой. Если перед \nm следует не менее n сохраненных совпадений, n является обратной ссылкой, после которой стоит литерал m. Если ни одно из указанных условий не выполняется, \nm соответствует восьмеричному escape-знаку nm, когда n и m являются цифрами в восьмеричном формате (0 – 7).

\nml

Соответствует восьмеричному escape-знаку nml, когда n является цифрой в восьмеричном формате (0-3), а m и l являются цифрами в восьмеричном формате (0 – 7).

\un

Соответствует n, где n — это знак Юникода, выраженный в виде четырех шестнадцатеричных цифр. Например, "\u00A9" соответствует символу авторского права (©).

См. также

Другие ресурсы

Знакомство с регулярными выражениями