Перейти к основному содержимому
FreeOnlineTools Go
Русский
Ссылка

Шпаргалка по регулярным выражениям: Синтаксис, флаги и частые шаблоны

Автор: FreeOnlineTools Team · Обновлено 2026-08-28

Быстрый ответ

Regex объединяет literal characters, metacharacters (., \d, \w, \s), quantifiers (*, +, ?, {n,m}), anchors (^, $, \b) и groups ((...), [...]). Flags вроде g (global), i (case-insensitive), m (multiline) меняют поведение match. Тестируйте live нашим Regex Tester.

Введение

Regular expressions (regex) описывают текстовые паттерны компактным формальным языком. Поддерживаются каждым современным языком программирования, редактором и search tool. Этот cheat sheet — справочник синтаксиса, определённого ECMAScript, плюс распространённые паттерны. Используйте наш Regex Tester для тестирования паттернов.

Шаг за шагом

  1. Классы символов — соответствуют набору символов.

    [abc] соответствует a, b или c. [^abc] соответствует чему угодно, кроме a, b, c. [a-z] соответствует любой строчной букве. Предопределенные классы: \d = [0-9], \D = нецифра, \w = [A-Za-z0-9_], \W = не слово, \s = пробел, \S = непробел, . = любой символ, кроме новой строки (используйте флаг s, чтобы включить новую строку).

  2. Квантификаторы — сколько раз повторять

    * = 0 или более. + = 1 или более. ? = 0 или 1. {n} = ровно n. {n,} = не менее n. {n,m} = между n и m. Добавлять ? для ленивого сопоставления (например, *? соответствует как можно меньшему количеству совпадений). Жадный режим используется по умолчанию и может привести к катастрофическому возврату во вложенных шаблонах.

  3. Якоря и границы – где сопоставлять

    ^ соответствует началу строки (или строки с флагом m). $ соответствует концу. \b соответствует границе слова (между \w и \W). \B соответствует границе, отличной от слова. Якоря имеют нулевую ширину — они проверяют положение, не потребляя символы.

  4. Группы и чередование

    (abc) — захватывающая группа; используйте 1, 2 доллара в качестве замены. (?:abc) — группа без захвата. (?=abc) — это просмотр вперед (утверждает следующее). (?!abc) — это отрицательный прогноз. (?<=abc) — просмотр назад (ES2018+). a|b — чередование (a или b).

  5. Флаги — изменение поведения сопоставления

    g = global (найти все совпадения, а не только первое). я = регистронезависимо. m = многострочный (^ и $ соответствуют границам строк). s = dotAll (. соответствует новой строке). u = unicode (рассматривайте шаблон как кодовые точки Unicode; необходимо для эмодзи и астральных символов). y = липкий (соответствует только последнему индексу).

Примеры

Сопоставьте адрес электронной почты (практично, упрощенный RFC 5322).

Вход: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/

Выход: Соответствует «user@example.com» и «a.b@sub.domain.co», но не «plainaddress» или «@no-user.com».

Извлеките все шестнадцатеричные коды цветов из CSS.

Вход: Pattern: /#[0-9a-fA-F]{3,8}\b/g

Выход: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']

Подтвердите дату ISO 8601 (ГГГГ-ММ-ДД)

Вход: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/

Выход: Соответствует «2026-08-28», но отклоняет «2026-13-01» и «2026-02-31».

Замените цифры на #, используя группу захвата.

Вход: «Заказ 42 отправлен» заменен на /(\d+)/g →'#$1'

Выход: «Заказ №42 отправлен»

Распространенные проблемы

  • Жадные квантификаторы совпадают слишком сильно: '<.*>' в '<a><b>' соответствует всей строке '<a><b>' вместо '<a>'. Используйте '<.*?>' (ленивый), чтобы сначала сопоставить '<a>'.
  • Катастрофический возврат: вложенные квантификаторы типа (a+)+b на вводе «аааааааааааааа!» может занять экспоненциальное время. Перепишите шаблон или используйте атомарные группы/притяжательные кванторы, где это поддерживается.
  • Если забыть флаг u для Юникода: /^.$/ соответствует одной кодовой единице, поэтому эмодзи типа «😀» (две кодовые единицы) не работают без флага u. Всегда добавляйте u при сопоставлении астральных персонажей.
  • Путаница \b (граница слова) с \s (пробелы): \b соответствует слову и символу, не являющемуся словом, поэтому он работает и в начале/конце строки. \s соответствует только реальным символам пробелов.

Советы

  • Всегда проверяйте регулярное выражение как на совпадающих, так и на несовпадающих образцах в нашем тестере регулярных выражений, прежде чем встраивать его в рабочий код — крайние случаи легко пропустить.
  • Предпочитайте классы символов [a-z] вместо чередования (a|b|...|z) для отдельных символов — классы работают быстрее и понятнее.
  • Используйте группы без захвата (?:...), если вам не нужны захваченные значения — захват требует небольших затрат производительности и загромождает массив результатов.
  • Компилируйте регулярное выражение один раз с помощью new RegExp() или литерала в области модуля, а не внутри горячего цикла — перекомпиляция одного и того же шаблона на каждой итерации тратит ресурсы процессора.

Сопутствующие инструменты

Связанные руководства

Ссылки