Регулярные выражения в Sublime Text
И в первую очередь мы разберем на примере, как использовать регулярные выражения при работе с Sublime Text. Регулярные выражения — это мощнейший инструмент, хорошо известный программистам. Однако он может быть полезен не только программистам, но и всем людям, работающим с кодом или простым текстом. Регэкспы (от RegExp) способны значительно облегчить вам жизнь и автоматизировать рутинные операции. И они просто незаменимы при необходимости поиска и замены текста по определенным признакам.
«Капитализация» текста
Предположим, нам нужно прописать с большой буквы каждое слово текста, заключенного в определенные теги. Как это можно сделать? Можно найти каждое вхождение тега и вручную изменить его содержимое. Но это долгий и утомительный способ, поэтому мы пойдем другим путем.
В Sublime есть инструмент для подобного управления регистром символов, и находится он в меню по адресу Edit → Convert Case → Title Case. Тот же инструмент доступен при поиске в командной панели — нажмите CtrlShiftP и наберите там слово «title», либо наберите слово «case» чтобы увидеть другие доступные варианты манипуляций с регистром. Естественно, предварительно нужно выделить текст, с которым вы хотите производить манипуляции.
Следующий вариант, который приходит в голову — использовать множественные курсоры для выделения текста в нескольких местах и последующего изменения регистра (см. врезку выше). Но этот способ по-прежнему слишком медленный, особенно если нужно обработать подобным образом большое количество текста.
И тут нам на помощь приходят регулярные выражения.
Нажмите Ctrl+I для использования последовательного поиска (я уже писал о нем в одной из предыдущих статей). В появившейся панели в нижней части редактора можно набирать поисковые запросы в том числе с использованием регулярных выражений. Например, для нахождения всех вхождений тега h2необходимо ввести следующую строку:
<h2>.+</h2>
В примере выше точка олицетворяет собой любой символ, а знак «+» указывает, что допустимо любое количество вхождений указанного символа. Подробный синтаксис регулярных выражений вы можете найти на специализированных ресурсах (начать можно с уже упомянутой страницы в Википедии).
Однако по умолчанию регулярные выражения в поисковой форме не обрабатываются. Для того, чтобы они заработали, необходимо нажать кнопочку с символом «*» на той же поисковой панели. Того же эффекта можно добиться, нажав CtrlR (при этом поисковая панель должна быть активна).
Теперь Sublime должен подсветить ближайшее вхождение заданной последовательности.
Для того же, чтобы выделить все вхождения этой последовательности, необходимо (при активной поисковой строке) нажать Alt+Enter. При этом каждое вхождение будет выделено отдельно, используются уже знакомые нам множественные курсоры.
Теперь нам осталось (не снимая выделения со строк) выполнить упомянутую выше операцию «Title Case». Но после ее применения обнаруживается неприятность — с большой буквы начинается каждое слово, кроме первого:
Это происходит потому, что между открывающим тегом h2 и первым словом заголовка нет пробела, соответственно вся последовательность воспринимается редактором как одно слово. Но эту неприятность легко исправить, нужно лишь слегка изменить наше регулярное выражение:
(?<=<h2>).+(?=</h2>)
Тем самым мы ищем ту же последовательность, но исключаем из выделения сам тег, оставляя только его содержимое:
И если после этого выполнить команду «Title Case», то на этот раз мы добьемся именно того эффекта, которого хотели:
Естественно, это далеко не единственный способ использования регулярных выражений. Но цель этой статьи — не разобрать все их разнообразие, а показать, что используя регэкспы можно значительно облегчить себе жизнь, а также показать, как именно осуществляется работа с регулярными выражениями в Sublime Text. Естественно, использовать их можно не только на панели последовательного поиска (Ctrl+I), но также и при обычном поиске (Ctrl+F, либо при поиске и замене (Ctrl+H).