Как использовать Regex для «верхнего регистра и замены» в фрагментах кода Visual Studio? - PullRequest
1 голос
/ 03 мая 2019

Я хочу создать фрагмент кода Visual Studio 1.33.1, который создает класс C ++ с использованием имени файла.
Во-первых, я хочу настроить «включить защиту», суть в том, чтобы использовать имя файла, заменить каждое «.» на '_' и установите все это в верхний регистр (норма):
#ifndef FILE_CLASS_HPP //filename: File.class.hpp

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

Я пытался вручную присоединиться к Regex, но это не сработало:
#ifndef ${TM_FILENAME/(.*)/${1:/upcase}/[\\.-]/_/g}

ожидаемый результат:
#ifndef FILE_CLASS_HPP
фактический результат:
#ifndef ${TM_FILENAME/(.*)//upcase/[\.-]/_/g}

1 Ответ

1 голос
/ 03 мая 2019

Это должно работать:

"Filename upcase": {
  "prefix": "_uc",
  "body": [
    "#ifndef ${TM_FILENAME/([^\\.]*)(\\.)*/${1:/upcase}${2:+_}/g}"
  ],
  "description": "Filename uppercase and underscore"
},

([^\\.]*)(\\.)*  group1: all characters before a period
                 group2: the following period

заменить заглавными буквами все group1: ${1:/upcase}

заменить все group2s ' на _ 's

${2:+_} является условной заменой , поэтому вы добавляете _ только в конце заглавной буквы group1 , если существует следующая группа2.

Глобальный флаг g необходим в этом случае, чтобы перехватывать все вхождения group1group2, а не только первый.

...