Как найти в тексте нужный фрагмент

Регулярное выражение описывает правило поиска: например, «одна или несколько цифр подряд». Для этого правила достаточно шаблона \d+. В строке «Заказ 125, сумма 3400 ₽» он найдёт числа 125 и 3400, если включён флаг g. Флагом называют короткую настройку поиска; здесь он означает «искать все совпадения». Инструмент подсвечивает найденные участки и показывает их позиции.
Такая проверка помогает разобрать строку журнала, найти артикулы, проверить формат ввода или подготовить правило для редактора. Она особенно полезна, когда выражение уже написано, но захватывает лишнее. Вместо гадания добавьте к удачному примеру пару неудобных строк: пустую, слишком длинную, с пробелом, переносом или похожей буквой. Хороший шаблон должен правильно отказываться от ненужного текста.
Что вводить в шаблон и флаги
Шаблон вводится без косых черт по краям: \d+, а не /\d+/g. Буква g идёт в отдельное поле. Обратный слеш здесь не нужно удваивать. Запись \\d+, которую можно встретить внутри строки JavaScript, содержит дополнительное экранирование для программного кода; в поле шаблона это уже другое выражение.
Флаг i позволяет не различать строчные и заглавные буквы. Флаг m разрешает знакам ^ и $ обозначать начало и конец каждой строки. Флаг s меняет точку: она начинает совпадать и с переносом строки. Эти настройки независимы. Добавить m, чтобы точка прошла через несколько абзацев, не получится.
Флаги u и v включают Unicode-режимы, но вместе недопустимы. В них, например, можно искать буквы через \p{L}. Более новый v расширяет возможности наборов символов; его поддержка зависит от браузера. Флаг d добавляет позиции захваченных групп. Флаг y требует совпадения строго с текущей позиции: первый поиск начинается с 0, а при сочетании с g следующий продолжается сразу после предыдущего.
Как проверить выражение на знакомых задачах
Для каждого случая важны три вещи: сам шаблон, флаги и исходная строка. Если поменять только один из этих элементов, ответ уже может стать другим. Начните с короткого фрагмента, где ожидаемые совпадения легко перечислить вручную.
Номера в заказе. Для текста «Заказ 125, сумма 3400 ₽» шаблон \d+ и флаг g дают два совпадения: 125 и 3400. Уберите g, останется только 125. Если нужен именно номер заказа, общий поиск цифр слишком широк: сумма тоже число. Уточнение Заказ (\d+) найдёт фразу целиком и отдельно сохранит 125 в первой группе.
Одинаковое слово в разном регистре. В строке «Cat cat CAT» шаблон cat с флагами gi найдёт 3 участка. С одним g останется один: cat. Это удобно при поиске метки в выгрузке, где люди писали её по-разному. Но регистр иногда несёт смысл, например в пароле, поэтому включать i автоматически не стоит.
Строки, состоящие только из цифр. Возьмите три строки: 125, 3400 и x7. Шаблон ^\d+$ с флагами gm найдёт первые две, а третью пропустит. Без m весь многострочный текст не подойдёт, и совпадений будет 0. Такая проверка отделяет числовые записи от посторонних, но ещё не проверяет, входят ли числа в нужный диапазон.
Точка в имени файла. В тексте «file.txt fileXtxt» выражение file.txt с g найдёт 2 фрагмента: обычная точка означает почти любой символ. Шаблон file\.txt оставит одно совпадение, file.txt. Перед массовым поиском файлов эта маленькая черта спасает от большого списка лишних результатов.
Две фразы в кавычках. Для строки «"чай" и "кофе"» шаблон ".*" найдёт один длинный участок от первой до последней кавычки. Вариант ".*?" с g найдёт два отдельных слова в кавычках. Знак вопроса делает повторение ленивым: оно останавливается на первой подходящей границе. Для формата с экранированными кавычками понадобится более точное правило.
Части даты. Шаблон (\d{2})\.(\d{2})\.(\d{4}) на строке «05.10.2026» даст полное совпадение и три группы: 05, 10, 2026. Это помогает разделить день, месяц и год перед обработкой. Однако «99.99.2026» тоже подходит по форме. Существование даты проверяют отдельно, иначе аккуратная запись легко превращается в несуществующий день календаря.
Что означают позиции, группы и пустые совпадения
Диапазон 6–9 означает начало с индекса 6 и конец перед индексом 9. Отсчёт начинается с нуля, длина участка равна 9 − 6 = 3. JavaScript считает позиции в кодовых единицах UTF-16: у обычной русской буквы одна такая единица, а у многих эмодзи две. Поэтому точка с флагами gu на тексте «😀x» найдёт два символа с началами 0 и 2, а не 0 и 1.
Круглые скобки сохраняют часть совпадения в группу. Номера идут по порядку открывающих скобок, начиная с 1. Группа (?<year>\d{4}) дополнительно получает имя year. Если необязательная группа не участвовала, это отличается от найденной пустой строки: в подробностях эти состояния подписаны отдельно. При повторении группы сохраняется её последний захват.
Пустой шаблон допустим. Он совпадает с позициями между символами и по краям, поэтому для «abc» с g получается четыре совпадения. Якорь ^ тоже ничего не «съедает»: он отмечает место. В подсветке пустые совпадения показаны вертикальной чертой. Такая выдача не означает, что инструмент нашёл четыре скрытые буквы.
Где заканчиваются возможности проверки
Здесь используется синтаксис JavaScript того браузера, в котором открыта страница. Правило для Python, PHP или редактора с другим движком может требовать изменений. Особенно осторожно переносите выражения с именованными группами, проверкой текста позади совпадения и расширенными классами Unicode. Перед применением запустите ту же контрольную строку уже в целевой программе.
Инструмент принимает до 2 000 единиц UTF-16 в шаблоне и 50 000 в тексте. Показывает первые 1 000 совпадений, а подробности групп для первых 100. Слишком долгий поиск прерывается примерно через 500 мс вычисления. Это защита страницы, а не измерение производительности: загрузка worker, устройства и фоновые вкладки влияют на время. Сообщение об остановке не доказывает ошибку синтаксиса.
Проверка работает в браузере: введённые строки не отправляются этим инструментом на сервер и не сохраняются им в ссылке или хранилище. Сам сайт может загружать рекламу и другие внешние ресурсы, поэтому обещание полной изоляции всей страницы было бы неверным. Для теста лучше заменить персональные данные вымышленными, сохранив их формат.
Регулярное выражение находит фрагменты, но не сравнивает версии документа и не понимает структуру любого файла. После правки пригодится сравнение двух текстов. Для вложенных объектов используйте проверку и форматирование JSON: скобки внутри строк и экранирование надёжнее разбирать по правилам формата.
Почему шаблон находит не то, что ожидалось
Несовпадение часто связано с границами поиска, похожими символами или слишком широким правилом. Проверяйте не только правильный образец, но и строку, которая отличается от него одним знаком.
Почему \w не находит русские слова?
В JavaScript класс \w в основном описывает латинские буквы A–Z и a–z, цифры и подчёркивание. Это не обозначение всех букв мира. Для букв разных алфавитов используйте \p{L}+ с флагом u или v; для конкретного русского набора можно явно записать [А-Яа-яЁё]+.
Как искать знак плюс, скобку или вопросительный знак буквально?
У служебного символа нужно убрать специальное значение обратным слешем: \+, \(, \?. Например, C\+\+ найдёт C++ целиком. Если вставить просто C++, браузер сообщит об ошибке повторения. Внутри квадратных скобок правила экранирования отличаются, особенно в Unicode-режимах.
Можно ли проверить всю строку, а не найти её часть?
Обычно шаблон ограничивают якорями ^ и $, не включая m. Например, ^[0-9]{4}$ допускает ровно четыре цифры. Для пустой строки потребуется явно разрешённое нулевое количество; один знак + требует хотя бы один символ. В JavaScript без m якорь $ проверяет конец всей строки.
Почему цифры другого алфавита не находятся через \d?
В JavaScript \d соответствует десяти ASCII-цифрам 0–9. Для десятичных цифр разных письменностей используйте \p{Decimal_Number} с u или v. Но перед преобразованием такого результата в число отдельно проверьте правила целевой программы: визуальное сходство цифры не гарантирует одинаковое чтение.
Как найти пересекающиеся совпадения?
Обычный глобальный поиск продолжает работу после найденного участка и не возвращается внутрь него. В ababa шаблон aba с g даст одно совпадение. Проверка вперёд (?=(aba)) с g даёт две пустые позиции, 0 и 2, а нужный текст находится в группе 1. Поэтому смотреть нужно и на группы, и на подсветку.
Почему ленивый шаблон тоже работает долго?
Ленивость меняет порядок перебора вариантов, но не убирает сам перебор. Вложенные повторения вроде (a+)+ могут проверять множество разбиений, когда конец строки не подходит. Уберите неоднозначное повторение, точнее опишите разделитель и проверьте длинную неудачную строку, а не только короткую удачную.
Можно ли одним выражением проверить адрес электронной почты?
Короткое правило подходит для предварительной проверки формы, но не доказывает существование почтового ящика. Сложные допустимые адреса и особенности доменов требуют отдельной обработки. Для регистрации подтверждают владение адресом письмом; удачное совпадение с шаблоном этого действия не заменяет.
Чем отличаются обычный пробел и неразрывный?
Они могут выглядеть одинаково, но имеют разные коды. Простой пробел в шаблоне не обязан совпадать с неразрывным пробелом из скопированной цены. Класс \s охватывает оба, а также табуляции и переносы. Если разрешены только пробелы внутри строки, задайте точный набор, чтобы случайно не захватить соседний абзац.
Похожие калькуляторы
Возможно вам пригодятся ещё несколько калькуляторов по данной теме:
- Калькулятор сравнения текстов. Вставьте две версии текста и найдите изменения по строкам или словам.
- Форматтер и валидатор JSON. Проверьте JSON, приведите его к читаемому виду или сожмите без потери данных.
- Количество символов в тексте: калькулятор. Посчитайте онлайн количество символов в тексте, включая или не включая пробелы.
- Визуальный редактор HTML. Редактируйте бесплатно и онлайн HTML-код, и сразу же смотрите внешний вид текста и страницы в режиме предпросмотра (WYSIWYG).
- Генератор паролей. Создайте сложный и надёжный пароль бесплатно с помощью онлайн-генератора из 8, 10, 12 или большего числа рандомных (случайных) символов.
- Генератор QR-кода. Вставьте ссылку или текст. Готовый QR-код можно скопировать или скачать как PNG.
- Сумма прописью. Переведите сумму в виде цифр в сумму прописью - текстом. Сделайте расшифровку правильно для договоров и других документов.
- Хрономер: время чтения текста. Оцените, сколько времени займёт чтение или произнесение текста вслух. Просто введите текст в форму, и хронометраж рассчитается автоматически.
- Рандомайзер: генератор случайных чисел. Выберите случайное число в нужном диапазоне для любых целей, в частности для розыгрышей и онлайн-лотерей в соцсетях.
- Случайный выбор из списка. Добавьте варианты по одному в строке, укажите количество и выберите режим повторов.
Есть что добавить?
Напишите своё мнение, комментарий или предложение.