Регулярные выражения -Метасимволы

Метасимволы в регулярных выражениях — это символы с особым значением. Они не представляют литеральные символы, а используются для управления шаблоном сопоставления.


Основные метасимволы

.(точка)

  • Совпадает с любым одиночным символом, кроме перевода строки (\n) вне любого одиночного символа

    Пример:a.bСовпадает с "aab", "a1b", "a b" и т. д.

^(каретка)

  • Совпадает с начальной позицией строки

  • Пример:^abcСовпадает со строками, начинающимися с "abc"

$(знак доллара)

  • Совпадает с конечной позицией строки

  • Пример:xyz$Совпадает со строками, заканчивающимися на "xyz"

\(обратная косая черта)

  • Экранирующий символ, он заставляет следующий символ потерять своё специальное значение

  • Пример:\.Совпадает с настоящей точкой, а не с любым символом


Метасимволы класса символов

[](квадратные скобки)

  • Определяет набор символов, совпадает с любым одним символом из него

  • Пример:[aeiou]Совпадает с любой одной гласной буквой

[^](отрицательный класс символов)

  • Совпадает с любым символом, которого нет в квадратных скобках

  • Пример:[^0-9]Совпадает с любым нецифровым символом

-(дефис)

  • Представляет диапазон внутри класса символов

  • Пример:[a-z]Совпадает с любой строчной буквой


Метасимволы квантификаторов

*(звёздочка)

  • Соответствует предыдущему подвыражению ноль или более раз

  • Пример:ab*cСоответствует "ac", "abc", "abbc" и т. д.

+(знак плюс)

  • Соответствует предыдущему подвыражению один или более раз

  • Пример:ab+cСоответствует "abc", "abbc", но не "ac"

?(вопросительный знак)

  • Соответствует предыдущему подвыражению ноль или один раз

  • Пример:colou?rСоответствует "color" и "colour"

{n}(фигурные скобки)

  • Совпадение ровно n раз

  • Пример:a{3}Совпадает с "aaa"

{n,}

  • Совпадение не менее n раз

  • Пример:a{2,}Совпадает с "aa", "aaa" и т. д.

{n,m}

  • Совпадение от n до m раз

  • Пример:a{2,4}Совпадает с "aa", "aaa", "aaaa"


Метасимволы группировки и чередования

()(круглые скобки)

  • Определяет подвыражение или группу захвата

  • Пример:(ab)+Совпадает с "ab", "abab" и т. д.

|(вертикальная черта)

  • Представляет отношение "или"

  • Пример:cat|dogСовпадает с "cat" или "dog"


Метасимволы специальных классов символов

\d

  • Совпадает с любой цифрой, эквивалентно[0-9]

\D

  • Совпадает с любым нецифровым символом, эквивалентно[^0-9]

\w

  • Совпадает с любым словесным символом (буквой, цифрой, подчёркиванием), эквивалентно[a-zA-Z0-9_]

\W

  • Совпадает с любым несловесным символом, эквивалентно[^a-zA-Z0-9_]

\s

  • Совпадает с любым символом пробела (пробел, табуляция, новая строка и т. д.)

\S

  • Совпадает с любым непробельным символом


Метасимволы сопоставления границ

\b

  • Совпадает с границей слова

  • Пример:\bcat\bСовпадает с "cat", но не с "category"

\B

  • Совпадает с не-границей слова

  • Пример:\Bcat\BСовпадает с "cat" в "scattered", но не с отдельным "cat"


Другие метасимволы

\n

  • Совпадает с переводом строки

\t

  • Совпадает с табуляцией

\r

  • Совпадает с возвратом каретки

\f

  • Совпадает с переводом страницы

\v

  • Совпадает с вертикальной табуляцией


Жадные и нежадные квантификаторы

По умолчанию квантификаторы (*, +, ?, {}) являются жадными, совпадая с как можно большим количеством символов. Добавьте после квантификатора?чтобы перевести его в нежадный (ленивый) режим:

  • *?: ноль или более, но как можно меньше

  • +?: один или более, но как можно меньше

  • ??: ноль или один, но как можно меньше

  • {n,m}?: от n до m раз, но как можно меньше

Пример:<.*?>При сопоставлении HTML-тегов он не сопоставляется между тегами


Позитивный и негативный просмотр вперёд

(?=...)(позитивный просмотр вперёд)

  • Совпадает с позицией, за которой следует определённый шаблон

  • Пример:Windows(?=95|98)Совпадает с "Windows", за которым следует 95 или 98

(?!...)(негативный просмотр вперёд)

  • Совпадает с позицией, за которой не следует определённый шаблон

  • Пример:Windows(?!95|98)Совпадает с "Windows", за которым не следует 95 или 98

(?<=...)(позитивный просмотр назад)

  • Совпадает с позицией, перед которой стоит определённый шаблон

  • Пример:(?<=95|98)WindowsСовпадает с "Windows", перед которым стоит 95 или 98

(?<!...)(отрицательный просмотр назад)

  • Совпадает с позицией, перед которой не стоит определённый шаблон

  • Пример:(?<!95|98)WindowsСовпадает с "Windows", перед которым не стоит 95 или 98

Примеры

Далее давайте разберём регулярное выражение для сопоставления адресов электронной почты, как показано ниже:

Примеры

var str = "abcd [email protected] 1234"; var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g; document.write(str.match(patt1));

Текст, отмеченный ниже, — это выражение с полученными совпадениями:


Попробуйте »

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

Символ Описание
\

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

^

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

$

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

*

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

+

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

?

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

{n}

n — неотрицательное целое число. Совпадает ровно n раз. Например, 'o{2}' не может совпадать с 'o' в "Bob", но может совпадать с двумя o в "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, \r). Чтобы совпадать с любым символом, включая '\n', используйте шаблон вида"(.|\n)".

(pattern)

Сопоставить шаблон и получить это совпадение. Полученное совпадение можно извлечь из результирующей коллекции Matches, используя коллекцию SubMatches в VBScript и свойства $0…$9 в JScript. Чтобы сопоставить символы круглых скобок, используйте '\\(' или '\\)'.

(?:pattern)

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

(?=pattern)

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

(?!pattern)

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

(?<=pattern) Утверждение положительного просмотра назад, аналогично утверждению положительного просмотра вперёд, но направление противоположное. Например, "(?<=95|98|NT|2000)Windows"может сопоставиться с"2000Windows"in"Windows", но не может сопоставиться с"3.1Windows"in"Windows"。
(?<!pattern) Утверждение отрицательного просмотра назад, аналогично утверждению отрицательного просмотра вперёд, но направление противоположное. Например(?<!95|98|NT|2000)Windows"может сопоставиться с"3.1Windows"in"Windows", но не может сопоставиться с"2000Windows"in"Windows"。
x|y

Сопоставляется с x или y. Например, 'z|food' может сопоставиться с "z" или "food". '(z|f)ood' сопоставляется с "zood" или "food".

[xyz]

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

[^xyz]

Отрицательный набор символов. Соответствует любому символу, который не включён. Например, '[^abc]' может соответствовать 'p', 'l', 'i', 'n' в "plain".

[a-z]

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

[^a-z]

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

\b

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

\B

Соответствует не границе слова. 'er\B' может соответствовать 'er' в "verb", но не может соответствовать 'er' в "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 — восьмеричная цифра (0-7), то n — восьмеричное escape-значение.

\nm

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

\nml

Если n — восьмеричная цифра (0-3), а m и l — обе восьмеричные цифры (0-7), то сопоставить восьмеричное escape-значение nml.

\un

Соответствует n, где n — символ Юникода, представленный четырьмя шестнадцатеричными цифрами. Например, \u00A9 соответствует символу авторского права (?).

Другие расширения