Command Palette

Search for a command to run...

Regex Заменить: найдите и замените регулярным выражением, не прикасаясь к редактору

Regex Заменить: найдите и замените регулярным выражением, не прикасаясь к редактору

T
Toolz Team
|Aug 23, 2026|17 Мин. читать

Часть коллекции регулярный

Задача, которая заставила меня построить это было скучно, именно поэтому это стоило автоматизировать Клиент вручил мне 4000-строчный экспорт, где каждая дата была написана по-американски, 01/15/2024, и система, в которую он входил, нуждалась в ISO, 2024-01-15. Простой поиск и замена не могли прикоснуться к нему, потому что не было фиксированной строки для поиска - все даты были разными. То, что они поделились, было а фасон: две цифры, косая черта, две цифры, косая черта, четыре цифры. Это именно то, что соответствует регулярному выражению, и именно то, что замена регекса переписывает за один проход. Я вставил файл в инструмент для царапин, написал одно выражение, и весь формат экспорта перевернулся менее чем за секунду.

Это работа бесплатная Регекс Заменить инструмент делает, и это руководство является длинной версией того, как использовать его хорошо. Я расскажу, что на самом деле замена regex, как обратные ссылки группы захвата позволяют вам реструктурировать текст вместо того, чтобы только удалить его, что означает каждый специальный токен замены, и ошибки, которые сбивают людей с толку. Он сидит рядом с Тестер регулярного выражения Я писал об отдельном - тестер говорит вам, что шаблон соответствует, и этот инструмент переписывает то, что он соответствовал Если регулярные выражения сами по себе являются новыми для вас, начните с полное руководство по инструментам кодирования и вернись.

TL;DR: Замена regex сопоставляет текст по шаблону и перезаписывает каждое совпадение с помощью заменяющей строки. оберните части, которые вы хотите повторно использовать, в круглые скобки, чтобы создать пронумерованные группы, а затем укажите их в замене на $1, $2, и так далее - закономерность (\d{4})-(\d{2})-(\d{2}) с заменой $3/$2/$1 повороты 2024-01-15 в 15/01/2024. Включите g флаг для замены каждого матча, оставьте замену пустой для удаления совпадений и используйте $<name> для названных групп. The Регекс Заменить инструмент полностью работает в вашем браузере и показывает количество замен в реальном времени.

Что такое замена regex?

Обычный поиск и замена работает на буквальном тексте: вы вводите точное слово, которое ищете, и точное слово, которое нужно поставить на его место. Это не удается в тот момент, когда что-то, что вы хотите изменить, это не фиксированная строка, а шаблон - дата в любой из ста форм, номер телефона, тег HTML, конечный пробег пробелов, имя переменной, которое следует соглашению. Регулярное выражение описывает этот шаблон, а замена регекса объединяет его с шаблоном, в котором говорится, как следует переписывать каждый матч.

Механизм имеет две половины The шаблон является регулярным выражением, с помощью которого движок сканирует ваш текст, находя каждое место, где происходит форма.The замена является строкой, которая заменяется в каждом совпадении. в простейшем случае замена является простым текстом и каждое совпадение становится одним и тем же - полезно для нормализации, скажем, каждой серии вкладок и пробелов в единое пространство. мощный случай, когда замена относится обратно к частям того, что было согласовано, поэтому выход строится из входа, а не является фиксированной константой. именно это превращает замену regex из тупого удаления и перепечатывания в настоящий инструмент реструктуризации.

Под капотом Регекс Заменить инструмент использует JavaScript RegExp двигатель и String.prototype.replace метод, который поставляется каждым браузером и Node.js. Это имеет значение по практической причине: поведение, которое вы видите в инструменте, идентично поведению, которое вы получите, если вставите тот же шаблон и замену в свой собственный код JavaScript или TypeScript. Нет отдельного вкуса, который можно изучить, и нет сюрприза, когда вы переходите от скретч-инструмента к производству. Синтаксис замены, который принимает инструмент - $1, $&, $<name> а остальное - это точный синтаксис, который определяет стандарт и документирует MDN&#39;s Строка.заменить ссылку, йо-

Как работают обратные ссылки на группы захвата?

Это единственная наиболее полезная идея в замене regex, и ее стоит замедлить. Когда вы помещаете часть шаблона в круглые скобки, вы создаете a группа захвата. Механизм запоминает текст, которому соответствует группа, и нумерует группы слева направо, начиная с единицы. В строке замены, $1 означает & quot;вставить всё, что захватила первая группа, & quot; $2 второй, и так до $99, йо-

Пример даты делает его конкретным. шаблон (\d{4})-(\d{2})-(\d{2}) имеет три группы: четырехзначный год, двузначный месяц и двузначный день. Когда он совпадает 2024-01-15первая группа держится 2024вторая группа держится 01и третья группа держится 15. Замена $3/$2/$1 затем собирает новую струну из этих частей в другом порядке и с другими сепараторами, производя 15/01/2024. Ничего не было удалено и перепечатано - вывод буквально перестраивается из захваченных фрагментов. переупорядочить токены, изменить пунктуацию между ними, обернуть их другим текстом, и вы переформатировали каждую дату в файле одним выражением.

Именованные группы - это та же идея с читаемыми метками. вместо подсчета круглых скобок вы пишете (?<year>\d{4}) и назовите это в замене как $<year>. Для шаблона с двумя или тремя группами числа хороши, но как только вы жонглируете пятью или шестью, имена делают и шаблон, и замену намного проще читать и изменять позже. Инструмент поддерживает как взаимозаменяемые, так и вы можете смешивать $1 а $<name> в той же замене, если хотите. когда вы впервые собираете шаблон и еще не уверены, какие группы вам нужны, регулярный конструктор помогает вам построить его по частям, прежде чем принести сюда для запуска замены.

Что означают специальные токены замены?

Знак доллара является особенным внутри заменяющей строки, и он вводит небольшой набор токенов за пределами пронумерованных и названных групп. их знание спасает вас от поиска более сложного шаблона, чем вам нужно.

$& вставляет всю согласованную подстроку Это то, что вы хотите, когда вы обертываете или аннотируете совпадения, а не восстанавливаете их - шаблон \b\w+@\w+\.\w+\b с заменой <$&> ставит угловые скобки вокруг каждого адреса электронной почты, без необходимости фиксировать все это в группе. $\`` (a backtick) inserts everything *before* the match, and $&#39;(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$in the replacement produces a single$` в выпуске, что имеет значение в тот день, когда вы переформатируете валюту.

Есть одна идиома удаления, которую стоит зафиксировать в памяти: пустая замена удаляет каждый матч При включенном глобальном флаге и поле Заменить оставленном пустым инструмент удаляет каждое вхождение шаблона из текста Это самый чистый способ удалить что-то - все теги HTML с <[^>]+>каждое конечное пространство с +$ в многострочном режиме все нецифры с номера телефона с \D. Вы не заменяете пробелом или заполнителем; вы заменяете ничем, и матч просто исчезает.

Какие флаги имеют значение для замены?

Флаги на регексе меняют способ его применения, и два из них доминируют в повседневной работе по замене. Остальные ситуативны, но иногда решающи.

Глобальный флаг, g, это тот, который вы будете переключать больше всего Без него, JavaScript&#39;s replace меняет только в первую очередь совпадает и оставляет в покое остальной текст - это стандартно String.replace поведение и удивление людей, ожидающих замены всем. Повернуть g на и каждый матч в тексте переписывается Инструмент по умолчанию глобальный на, потому что замена всего это то, что люди имеют в виду девятнадцать раз из двадцати, но переключатель есть для тех случаев, когда вы искренне хотите коснуться только первого события. флаг игнорирования-случая, i, делает шаблон совпадающим независимо от буквенного случая, так что error также матчи Error а ERROR - важно, когда вы нормализуете уровни журналов или наводите порядок в непоследовательной капитализации.

Многострочный флаг, m, меняет якоря ^ а $ среднее значение: при включении они соответствуют началу и концу каждого из них строй вместо всего текста, что вы хотите, когда вы снимаете конечные пробелы или префиксируете каждую строку. Флаг dotAll, s, позволяет точке соответствовать символам новой строки, так что шаблон может охватывать разрывы строки - полезно для перезаписи многострочных блоков. The u (юникод) и y (липкие) флаги предназначены для продвинутых случаев: u обеспечивает правильную обработку символов за пределами базовой плоскости и определенных форм эвакуации y якоря каждый матч пытается до точной позиции после предыдущего. Таблица сравнения ниже суммирует, когда каждый из них зарабатывает свое место.

знамя Письмо Влияние на замену Типичное использование
всеобъем g Заменяйте каждый матч вместо только первого Почти каждый заменитель-все
Игнорировать дело i Соответствовать независимо от буквенного случая Нормализация уровней журналов, уборка капитализации
Многолинейный m ^ а $ привяжитесь к каждой линии Префикс линий, зачистка прицепных пространств
DotAll s Точка также соответствует новым строкам Переписывание многострочных блоков
Юникод u Правильное обращение с астральными персонажами и \u{...} Эмодзи, нелатинское письмо
Липкий y Матч только на текущей позиции Токенизаторы, строгий последовательный синтаксический анализ

Когда мне следует использовать замену regex вместо простой замены?

Разделительная линия проста: используйте простой поиск и замену, когда вы знаете точный текст, и тянитесь к замене regex, когда вы знаете форму, но не точный текст. Если вы меняете каждый 2023 на 2024, обычная замена быстрее и безопаснее Если вы меняете каждые четыре цифры год независимо от ценности, только шаблон может выразить это.

Три семейства задач явно относятся к регексу. Первый есть переформатирование, где контент остается прежним, но его расположение меняется - даты, номера телефонов, имена написаны & quot;Последний, Первый&quot; что вы хотите как & quot;Первый Последний.& quot; Захват групп плюс переупорядоченная замена обрабатывают все это. Второй сыпучая зачистка, где вы удаляете все, что соответствует шаблону - теги, комментарии, управляющие символы, дополнительные пробелы - заменяя ничем. Третий есть условное редактирование в масштабе, где вы завершаете, префиксируете или аннотируете каждое появление шаблона, используя $& чтобы сохранить совпадение и добавить к нему Когда трансформация, которую вы себе описываете, содержит слово & quot;every& quot; за которым следует описание, а не буквальная строка, вы находитесь на территории, заменяемой regex.

Есть также аргумент рабочего процесса. Выполнение этих изменений в вашем редакторе кода &#39;s find-and-replace работает, но он редактирует файл на месте, что означает, что ошибка является ошибкой в вашем реальном файле. запуск преобразования в скретч-инструменте сначала позволяет вам увидеть вывод и счетчик замены, прежде чем что-либо зафиксировать, а затем вставить проверенный результат обратно. Потому что Регекс Заменить инструмент полностью работает в вашем браузере и никогда не загружает то, что вы вставляете, его безопасно использовать, даже если текст представляет собой журнал производства или экспорт клиента - это я полностью подчеркиваю руководство по конфиденциальности данных для онлайн-инструментов, йо-

Какие распространенные ошибки при замене regex?

Самый частый - забыть глобальный флаг и задаться вопросом, почему изменился только первый матч. Если ваша замена, кажется, почти ничего не сделала - одна правка, где вы ожидали десятки - проверьте это g включен. Это настолько распространенное путешествие, что инструмент по умолчанию включает его, но в тот момент, когда вы выключаете его, чтобы нацелиться на один матч, не забудьте повернуть его назад.

Второе - буквальное $1 появление в выводе, где вы ожидали захваченный текст, Это почти всегда означает, что группа, на которую вы ссылаетесь, не существует - ваш шаблон не имеет первого набора круглых скобок, поэтому нет ничего для $1 чтобы заменить, и движок оставляет токен как есть. исправление заключается в том, чтобы обернуть часть, которую вы хотите повторно использовать, в скобки для создания группы и считать группы слева, начиная с единицы. Связанная ловушка - это неправильный подсчет, когда ваш шаблон вложен или необязательные группы; когда нумерация становится запутанной, переключитесь на именованные группы, чтобы ссылка была однозначной.

Третья ошибка - это шаблон, который соответствует больше, чем вы предполагали, обычно потому, что квантор жадный. шаблон, как <.+> предназначенный для соответствия одному HTML-тегу, будет с удовольствием совпадать с первого < в продленный > на линии, проглатывая все между двумя тегами Лекарство является не жадным квантором, <.+?>, или более точный класс символов, <[^>]+>. Это именно та ситуация, когда вы проверяете закономерность в Тестер регулярного выражения сначала посмотрите, что он выделяет, и только потом запустите замену - привычку руководство regex-тестера подробно просматривает. количество замен, показанное в инструменте, является вашей другой защитой: если он сообщает о гораздо большем или гораздо меньшем количестве замен, чем количество вещей, которые вы хотели изменить, шаблон неправильный, а не инструмент.

Работающий пример: переформатирование названий и зачистка шума

Позвольте мне пройти через небольшую работу от начала до конца, потому что, видя, как части работают вместе, идея исправляется лучше, чем любое отдельное правило. Предположим, у вас есть список контактов, экспортированных как Doe, Jane а Smith, Johnпо одному на строку, и вы хотите, чтобы они были такими Jane Doe а John Smith, йо-

Форма каждой строки: некоторые символы слова, запятая, пробел, затем больше символов слова. как шаблон, который есть (\w+), (\w+), с фамилией, захваченной в первой группе, и именем во второй группе Замена, которая меняет их местами и опускает запятую $2 $1 - группа два, пространство, группа один. Вставьте список в Регекс Заменить инструмент, введите этот шаблон и замену, оставьте глобальный флаг включенным, и каждая строка переключается на & quot;First Last&quot; сразу. счетчик замен сообщает вам, сколько строк было затронуто, и вы можете проверить здравомыслие по количеству контактов.

Теперь скажите, что тот же экспорт имеет конечное пробелы на некоторых строках, которые вы также хотите, чтобы исчезли. Это вторая, отдельная замена: шаблон +$ с многострочным флагом на том $ соответствует концу каждой строки, и пустой замены, поэтому совпадающие пробелы удаляются, а не заменяются. Запустите его после замены имени и файл чист. Двухпроходный подход - одна замена для реструктуризации, одна для удаления - типичен, и поскольку каждый проход показывает вам его вывод и подсчет перед копированием, вы никогда не догадываетесь, сделало ли преобразование то, что вы имели в виду. Когда измененный текст нуждается в окончательном визуальном различении по сравнению с оригиналом, чтобы подтвердить, что ничего больше не перемещалось, вставьте обе версии в текст разница инструмент. Для более широкого набора повседневных утилит, в которые это вписывается, Набор инструментов для веб-разработчиков собирает те, к которым я обращаюсь больше всего.

Часто задаваемые вопросы

Как найти и заменить регулярное выражение в Интернете? Введите свой шаблон в поле Найти без косых черт, напишите замену в поле Заменить, выберите флаги и вставьте текст Переписанный вывод появляется мгновенно и показывает, сколько замен было запущено Все происходит в вашем браузере, поэтому ничего не загружается.

Как работают обратные ссылки группы захвата при замене? Круглые скобки в вашем шаблоне создают пронумерованные группы, и вы повторно используете их в замене на $1, $2 и т. д. Например, шаблон (\d{4})-(\d{2})-(\d{2}) с заменой $3/$2/$1 превращает 2024-01-15 в 15.01.2024. Именованные группы типа (?\d{4}) обозначаются как $, йо-

Как заменить все матчи вместо только первых? Включить флаг g (global).Без него JavaScript заменяет только первое совпадение, точно так, как ведет себя метод String.replace.С включенным g каждое совпадение в тексте заменяется, что и нужно большинству задач replace-all.

Как удалить каждый матч вместо его замены? Оставьте поле Заменить пустым При включенном глобальном флаге каждое совпадение удаляется из текста Это самый чистый способ удалить теги, пробеги пробелов или нежелательные символы, которые имеют общий шаблон.

Что означают специальные токены $&amp;, обратный тик и апостроф в замене? $&амп; вставляет всю согласованную подстроку, обратная кавычка вставляет текст перед совпадением, а апостроф вставляет текст после него. чтобы вывести буквальный знак доллара, напишите $$. Они следуют стандартным шаблонам замены JavaScript String.replace.

Какой вкус регекса использует этот инструмент? Он использует встроенный в ваш браузер движок RegExp JavaScript (ECMAScript), который идентичен тому, что есть в Node.js. Результаты здесь совпадают с тем, как ведут себя один и тот же шаблон и замена в JavaScript и TypeScript. JavaScript regex отличается от PCRE, Python re, и Java некоторыми расширенными функциями.

Почему моя замена дает буквально 1 доллар вместо захваченного текста? Буквальный $1 в выводе обычно означает, что ваш шаблон не имеет первой группы захвата, поэтому нет ничего для $1, чтобы ссылаться. оберните часть, которую вы хотите повторно использовать в скобках, чтобы создать группу, и считайте группы слева направо, начиная с 1.

Безопасно ли запускать замену regex на конфиденциальных данных? Да. все сопоставление и замена происходит в JavaScript внутри вашего браузера, поэтому ни на один сервер не отправляется шаблон, замена или текст, ничего не регистрируется, и инструмент работает с отключенным соединением. вы можете безопасно переформатировать файлы журналов, личные данные или собственные форматы.


Это руководство сопровождает бесплатное Регекс Заменить инструмент на Toolz.dev - без регистрации, без загрузки, работает в автономном режиме.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!