如何使用正则表达式在 Visual Studio Code 的代码片段中“大写并替换”?

tbl*_*dez 2 regex code-snippets visual-studio-code

我想在 Visual Studio Code 1.33.1 上创建一个片段,使用文件名创建一个 C++ 类。
首先,我要设置“包含保护”,重点是使用文件名,替换每个“。” 通过 '_' 并将其全部设置为大写(规范):
#ifndef FILE_CLASS_HPP //filename: File.class.hpp

VSC 文档为文件名提供了一些变量,以及一些用于更改为全部大写并用另一个字符替换字符的正则表达式。
要点是:我从来没有成功地做到这两件事,因为我对正则表达式一无所知。

我尝试手动加入正则表达式,但它从未起作用:
#ifndef ${TM_FILENAME/(.*)/${1:/upcase}/[\\.-]/_/g}

预期结果:
#ifndef FILE_CLASS_HPP
实际结果:
#ifndef ${TM_FILENAME/(.*)//upcase/[\.-]/_/g}

Mar*_*ark 5

这应该有效:

"Filename upcase": {
  "prefix": "_uc",
  "body": [
    "#ifndef ${TM_FILENAME/([^\\.]*)(\\.)*/${1:/upcase}${2:+_}/g}"
  ],
  "description": "Filename uppercase and underscore"
},
Run Code Online (Sandbox Code Playgroud)
([^\\.]*)(\\.)*  group1: all characters before a period
                 group2: the following period
Run Code Online (Sandbox Code Playgroud)

将 group1 的所有内容替换为大写:${1:/upcase}

将所有 group2 替换'_'

${2:+_}是一个条件替换,因此如果有后续的 group2,则只需_在 group1 末尾添加一个大写字母。

在这种情况下,全局g标志是必要的,以捕获所有出现的 group1group2,而不仅仅是第一个。