RegexSmith
Регулярные выражения с объяснением и проверкой прямо там, где они написаны. Наведите курсор на шаблон в C# — и увидите по строке на каждую часть простыми словами, группы в цвете и подходящие строки; шаблоны, которые могут зависнуть, подчёркнуты; проверяйте свои примеры в окне Тестер RegexSmith и записывайте шаблон обратно одним щелчком.
Бесплатно · Visual Studio 2022 и 2026 · 14 языков интерфейса · без телеметрии
Зачем RegexSmith
![Карточка при наведении на шаблон [GeneratedRegex]: шаблон с цветными группами, по строке на каждую часть простыми словами, подходящие примеры и один неподходящий, и статус ✓ безопасно](../../regexsmith/marketplace/hero.png)
Простые слова, а не урок синтаксиса
^(?<year>\d{4})-(?<id>\d{1,5})$ превращается в «Начало текста», «Число цифр: ровно 4», «Число цифр: от 1 до 5» — по строке на каждую часть, с вложением под свою группу, каждая группа своим цветом.
Проверено настоящим движком
Примеры в карточке и каждый результат в тестере получены от самого движка регулярных выражений .NET с параметрами вызова. Что вы видите, то и сделает ваше приложение.
Шаблоны, которые могут зависнуть
([a-z0-9]+\.?)+ выглядит безобидно, но может подвесить запрос на длинной строке, которая почти совпадает. RegexSmith подчёркивает такие повторения и исправляет их через Ctrl+.
Бесплатно и без подвохов
Без подписок, без «pro»-версии, без сбора данных и без сообщений в окне «Вывод» или при запуске. Шаблоны и примеры остаются на вашем компьютере. Единственное, о чём мы когда-нибудь попросим, — после того как вы им немного попользуетесь, — поставить оценку в Marketplace. Работает в Visual Studio 2022 и 2026, x64 и ARM64.
Возможности
- Карточка при наведении на шаблон в C#: шаблон с цветными группами, по строке на каждую часть простыми словами, цветные метки групп и статус — ✓ безопасно, ⚠ может зависнуть или ✕ недопустимо.
- Подчёркивание групп: тонкая линия цвета группы под каждой захватывающей группой прямо в коде; вложенные группы — ниже.
- Примеры, составленные по шаблону, — две подходящие строки и одна неподходящая, — проверенные настоящим движком .NET.
- RX001: волнистая линия под повторениями, которые могут занять экспоненциальное время, с исправлениями в Ctrl+. и предпросмотром «до/после».
- Тестер RegexSmith, закреплённый рядом с окном «Результаты поиска»: ваши примеры с ожиданиями ✓/✗, подсвеченные совпадения и группы, таблица групп и вкладка Замена.
- Применить к коду: изменённый шаблон возвращается в строковый литерал того же вида вместе с параметрами — одним действием отмены.
- Копировать как модульный тест для xUnit, NUnit или MSTest — ваши примеры становятся тестовыми случаями.
Карточка при наведении
Наведите курсор на строку шаблона — и в обычной подсказке Visual Studio появится карточка RegexSmith: что означает шаблон, чему он соответствует и безопасен ли он.

Где это работает
В файлах C#, над шаблоном в:
new Regex("…"), сRegexOptionsили без;- статических методах
Regex.IsMatch,Match,Matches,Replace,SplitиCount; [GeneratedRegex("…")];[RegularExpression("…")]— тогда карточка пишет Проверка: должно совпасть всё значение;const stringв том же файле, которую использует один из них.
Обычные, буквальные (@"…") и необработанные ("""…""") строки читаются так же, как их читает компилятор, поэтому "\\d" и @"\d" — один и тот же шаблон.
Что показывает карточка
| На экране | Значение |
|---|---|
| RegexSmith · Регулярное выражение .NET · IgnoreCase | Вид шаблона и параметры, прочитанные из вызова, а справа — статус. |
| Шаблон | Скобки каждой захватывающей группы — её цветом, содержимое подчёркнуто тем же цветом; сам текст остаётся цвета темы, поэтому легко читается. |
| Число цифр: ровно 4 | По строке на каждую часть простыми словами — «Начало текста», «Один из текстов: “jpg”, “png”», «Число цифр: от 1 до 5» — с вложением под свою группу. Очень длинный шаблон заканчивается строкой … ещё N. |
| Метки групп | Имя или номер каждой группы на метке её цвета — тех же цветов, что в шаблоне и под кодом. |
| ✓ Совпадают: … ✗ Не совпадает: … | Две подходящие строки и одна неподходящая, составленные по шаблону и проверенные настоящим движком .NET. Пробелы показаны бледными точками. |
| ▶ Проверить шаблон… | Открывает шаблон в тестере RegexSmith. |
Статус
| На экране | Значение |
|---|---|
| ✓ безопасно | .NET принимает шаблон, и ничто в нём не может вызвать катастрофический возврат. |
| ⚠ может зависнуть | Повторение может занять экспоненциальное время на длинном вводе, который почти совпадает; карточка называет вид проблемы (RX001) и подсказывает, что Ctrl+. предлагает исправления. |
| ✕ недопустимо | Движок отвергает шаблон; карточка показывает его сообщение: .NET не принимает этот шаблон: … |
«Безопасно» означает только это: .NET принимает шаблон, и он не может зависнуть. Это не значит, что он совпадает с тем, что вы задумали, — для этого и нужны примеры и тестер.
Подчёркивание групп
Каждая захватывающая группа шаблона получает тонкую линию своего цвета прямо в коде — того же цвета, что и в карточке. Длинный шаблон с пятью группами читается с одного взгляда: какая часть — год, какая — идентификатор.
Группа внутри другой группы расположена чуть ниже, так что видны обе линии. Цвета идут по порядку: лососевый, зелёный, синий, фиолетовый, янтарный, бирюзовый — и снова по кругу.
Подчёркивание можно выключить в настройках: Подчёркивать группы захвата.
Шаблоны, которые могут зависнуть
Некоторые шаблоны работают экспоненциальное время на длинной строке, которая почти совпадает, — классический способ, которым регулярное выражение подвешивает веб-запрос. RegexSmith находит их по форме и ставит волнистую линию предупреждения под повторением; наведите на неё курсор, чтобы узнать причину.
![Волнистая линия RX001 под ([a-z0-9]+\.?)+ с открытым меню Ctrl+. и предпросмотром исправления: старый шаблон зачёркнут, новый — с атомарной группой](../../regexsmith/marketplace/backtracking.png)
Что подчёркивается (RX001)
- Вложенное повторение:
(a+)+,([a-z0-9]+\.?)+— одну последовательность одинаковых символов можно разделить между внутренним и внешним повторением огромным числом способов. - Повторение альтернатив, совпадающих с одними и теми же символами:
(\w|\d)+— цифру может взять любая ветвь, поэтому каждая цифра удваивает работу.
Не внутри атомарных групп и проверок окружения и никогда с RegexOptions.NonBacktracking — там это невозможно.
Исправления в Ctrl+.
Поставьте курсор на волнистую линию и нажмите Ctrl+. — каждое исправление показывает предпросмотр: шаблон до (зачёркнутый) и после.
| Исправление | Что делает |
|---|---|
| Сделать внутреннее повторение атомарным: (?>…) | Оборачивает внутреннее повторение в (?>…). Совпадают те же строки; повторение больше нельзя разбить множеством способов. |
| Использовать RegexOptions.NonBacktracking (.NET 7+) | Добавляет параметр в вызов. Линейное время на любых входных данных; нужен .NET 7 или новее. Предлагается, только если шаблон это допускает: без обратных ссылок, проверок окружения, атомарных и балансирующих групп и условий. |
| Проверить этот шаблон в RegexSmith | Открывает шаблон в тестере — предлагается над любым шаблоном, а не только над рискованным. |
RX001 можно выключить в настройках (Подсказки в редакторе) или ссылкой Не показывать такие подсказки во всплывающей подсказке; исправления в Ctrl+. остаются.
Тестер
Тестер RegexSmith открывается закреплённым рядом с окном «Результаты поиска». Шаблон берётся из кода и остаётся связанным с ним: проверьте его на своих примерах, измените и запишите обратно.

Как открыть
- ▶ Проверить шаблон… в карточке при наведении;
- Ctrl+. на шаблоне › Проверить этот шаблон в RegexSmith;
- щелчок правой кнопкой в файле C# › Проверить шаблон регулярного выражения;
- Вид › Другие окна › Тестер RegexSmith — без связи с кодом: место, чтобы попробовать шаблон.
Шаблон и его параметры
Вверху — файл и строка шаблона; щёлкните, чтобы перейти туда. Ниже — поле шаблона, строка статуса (✓ безопасно, ⚠ может зависнуть или ошибка движка, затем N из M как ожидалось · мс) и кнопки параметров: IgnoreCase, Multiline, Singleline, IgnorePatternWhitespace, ExplicitCapture, RightToLeft, CultureInvariant. Любое изменение сразу запускает проверку заново.
Примеры и ожидания
В первый раз там уже есть примеры из карточки: два, которые должны совпасть, и один, который не должен. Введите новый в поле Добавьте пример и нажмите Enter…; щёлкните пример, чтобы изменить его, ✕ удаляет его. Значок перед каждым примером говорит, что он должен делать, — щёлкните его, чтобы поменять:
| На экране | Значение |
|---|---|
| ✓ | должен совпасть |
| ✗ | не должен совпасть |
| – | без ожидания, просто показать |
Пример, который ведёт себя наоборот, становится красным — ✗ совпадает или ✗ не совпадает, — так примеры превращаются в маленькую спецификацию шаблона. Совпадения подкрашены, группы подчёркнуты своими цветами, пробелы показаны точками. Проверка, которая длится больше 1 секунды, останавливается с пометкой ⏱ слишком медленно.
Группы выбранного примера перечисляет все совпадения выбранного примера: сначала всё совпадение, затем каждую группу с её значением и позицией (не захвачена, если группа не участвовала).
Замена
Вкладка Замена добавляет поле замены — $1, ${name}, $$ для $ — и показывает результат для каждого примера так, как это сделал бы Regex.Replace.
Копировать, вернуть, применить
Копировать как модульный тест помещает в буфер обмена тест с вашими примерами для xUnit, NUnit или MSTest — спецификация переезжает в тестовый проект.
Вернуть восстанавливает шаблон и параметры из кода; примеры остаются.
Применить к коду записывает шаблон обратно литералом того же вида, каким он был (обычным, буквальным или необработанным), вместе с параметрами — одна отмена возвращает всё назад. Если этот код изменился после того, как тестер его открыл, ничего не записывается: откройте тестер из шаблона заново.
Примеры запоминаются для каждого шаблона и каждого решения в %LocalAppData%\RegexSmith\samples, так что в следующий раз они уже на месте. В репозиторий ничего не попадает.
Настройки
Средства › Параметры › SmithWorks › RegexSmith. У каждого параметра есть краткое описание того, что он делает.
| Параметр | По умолчанию |
|---|---|
| Объяснять шаблоны при наведении | вкл. |
| Подчёркивать группы захвата | вкл. |
| RX001 Катастрофический бэктрекинг | вкл. |
| Попросить оценку в Marketplace | вкл. |
Внизу: Сбросить по умолчанию, Документация, Оценить на Marketplace и Обратная связь.
Настройки хранятся в %LocalAppData%\RegexSmith.

Вопросы и ответы
RegexSmith отправляет какие-нибудь данные?
Нет. Шаблоны читаются из открытого документа и выполняются на вашем компьютере; примеры хранятся в %LocalAppData%\RegexSmith. Ни сетевых запросов, ни телеметрии.
Карточка пишет «✓ безопасно». Значит, шаблон правильный?
Не обязательно. «Безопасно» означает, что .NET принимает шаблон и ни одно повторение в нём не может вызвать катастрофический возврат. Совпадает ли он с тем, что вы задумали, должны показать примеры: отметьте их ✓ или ✗ в тестере.
Почему над моим шаблоном нет карточки?
Карточка появляется над строковым литералом, про который RegexSmith знает, что это шаблон: аргумент new Regex, статического метода Regex, [GeneratedRegex] или [RegularExpression] либо константа из того же файла, используемая там. Шаблон, собранный во время выполнения (склеенный, прочитанный из настроек), прочитать нельзя. Проверьте также параметр Объяснять шаблоны при наведении в настройках.
Какой движок регулярных выражений используется?
Движок регулярных выражений .NET, на котором работает сама Visual Studio, с параметрами вызова. RegexOptions.NonBacktracking (.NET 7+) тоже читается из вызова; примеры тогда выполняются на обычном движке, и совпадают одни и те же строки в обоих случаях.
«Применить к коду» ничего не сделало.
Код шаблона изменился после того, как тестер его открыл, поэтому RegexSmith не пишет в место, где шаблона может уже не быть, — тестер сообщает об этом под кнопками. Откройте тестер из шаблона заново. Если в коде нет места для параметров ([RegularExpression] их не принимает), шаблон записывается, а параметры — нет.
Работает ли он в VB.NET, JavaScript или TypeScript?
В версии 1.0 — нет, только C#. В других языках другие движки; если вам нужен какой-то из них, напишите в репозиторий Feedback.
Где сообщить о проблеме или предложить идею?
Создайте issue в репозитории Feedback на GitHub — там есть формы для ошибок и идей (пожалуйста, замените закрытые имена). Можно также воспользоваться вкладкой Q&A на Marketplace.
История изменений
1.0.1
- У подсказок в редакторе свой список на странице параметров, а ссылка во всплывающей подсказке отключает вид подсказок прямо там, где вы его видите.
1.0.0
- Первый выпуск: карточка при наведении с разбором простыми словами, цветными группами, примерами, проверенными движком .NET, и статусом; подчёркивание групп в коде; RX001 для шаблонов, которые могут зависнуть, с исправлениями через атомарную группу и NonBacktracking в Ctrl+.; Тестер RegexSmith с ожиданиями, группами, вкладкой «Замена», кнопками «Копировать как модульный тест» и «Применить к коду»; однократная просьба об оценке.