Как было упомянуто @keith-hall в комментарии к вашему вопросу, это возможно, если воспользоваться тем фактом, что Sublime использует повысить синтаксис регулярного выражения для сопоставления и усилить строки форматирования, чтобы создать замещающий текст.
Одной из особенностей, которые это раскрывает, является идея условного выражения в замещающем тексте:
Персонаж '?' начинается условное выражение, общая форма:
?Ntrue-expression:false-expression
где N - десятичная цифра.
Если совпало подвыражение N, то оценивается истинное выражение и отправляется на выход, в противном случае оценивается ложное выражение и отправляется на выход.
Это означает, что для каждой группы захвата, которую вы включаете в свое регулярное выражение, вы можете указать, что следует заменить, в виде двух отдельных текстовых элементов; заменяющий текст, когда группа захватила какой-то текст, и заменяющий текст, когда это не так.
Пример этого, основанный на вашем вопросе выше, таков:
${1:${TM_FILENAME/(\.c)|(.)/(?1_H:)(?2\u$2:)/g}}
Частью регулярного выражения здесь является (\.c)|(.)
, которая соответствует либо буквальному тексту .c
(группа 1), либо, альтернативно, любому одиночному символу (группа 2).
В тексте замены (?1_H:)
говорится, что если первая группа захвата захватила какой-либо текст, заменой для него должен быть буквальный текст _H
; в противном случае текст замены должен быть пустой строкой.
После этого (?2\u$2:)
говорит, что если группа захвата 2 захватила что-либо, текст замены должен быть версией символа в верхнем регистре; в противном случае замена должна быть пустой строкой.
Поскольку входное регулярное выражение имеет чередование (символ |
), регулярное выражение соответствует либо одному, либо другому; таким образом, в замещающем тексте только одна или другая группа содержит какой-либо текст, и выходные данные действуют соответственно.
Параметры в регулярном выражении указывают g
, чтобы убедиться, что регулярное выражение применяется ко всему; в противном случае он будет совпадать только один раз, что в этом случае приведет к переводу первого символа в верхний регистр в имя файла и последующей остановке.
person
OdatNurd
schedule
04.11.2019