Нет такой проблемы которую нельзя было бы усугубить регуляркой (с)
Приходиось ли вам редактировать файлы полные повторяющегося кода? Гигантские файлы с тысячами строк повторяющегося кода. Если приходилось то вы меня поддержите в том что это наверное одна из самых долгих и утомительных задач в разработке. Всё-бы прекрасно решалось если бы у нас были одинаковые строки которые можно решить простой автозаменой, но так как жизнь полна неожиданностей, часто в заменяемых выражениях что-то меняется - то имя переменной другое то метод должен немного отличатся. Как раз для этих целей и был добавлен в автозамену функционал позволяющий выбирать и заменять при помощи регулярных выражений.
Регулярное выражение в этом случае сразу поможет с решением двух проблем:
- поиск с учётом заданной регулярки
- возможность захвата группы символов с последующей вставкой в заменяемый текст
На деле всё выглядит следующим образом - все IDE и некоторые текстовые редакторы поддерживают замену с регулярками. К примеру нам нужно заменить строку с следующим кодом на c#
:::csharp
Enum.IsDefined(typeof( SomeEnum ), enumVariable)
Заменить на свою реализацию:
:::csharp
Enum<SomeEnum>.IsDefined(enumVariable)
Можно пройтись по всему проекту и методично выполняя редактировать строки. Это долго и результат требует более тщательной проверки, ведь в каждой правке возможна опечатка. Решение очевидно из названия статьи - можно взять и в любимой IDE выполнить поиск с заменой при помощи регулярки:
Enum.IsDefined\([\s]*typeof\((?<enumType>[A-z]+)\),[\s]*(?<varName>[A-z]+)\)
а в строке замены указать:
Enum<${enumType}>.IsDefined(${varName})
Здесь мы использовали именованые группы. Выглядят они так - (?<enumType>[A-z]+)
. В треуголных скобках указано имя группы. В поле для ввода текста замены можно указать имя группы - ${enumType}
, и получить содержимое группы.
Некоторые IDE (Visual Code например) не поддерживают именованные группы в этом случае нужно использовать неименованые группы и обращатся к ним по индексу. Сделать это можно вот так: В поиске указать:
Promise<(\w+Dto)>
В тексте замены:
Observable<$1>
И на последок хотел бы порекомендовать просто великолепнейшую утилиту regexhero. Раньше это была вэб-утилита на сильверлайте, но с устареванием этой технологии автор перевёл своё детищи в десктопное приложение. Скачать его можно по тому же адресу.
PS: В кратце о синтаксисе регулярок
comments powered by Disqus