创建 VSCode 片段时,如何将变量转换为首字母大写(如 TitleCase)?

When creating a VSCode snippet, how can I transform a variable to title-case (like TitleCase)?

https://code.visualstudio.com/docs/editor/userdefinedsnippets#_placeholdertransform

我的目标是在插入的片段的上下文中自动设置 class 名称。 VSCode 本身不支持 class 或方法名称,但它支持文件名。

我的文件名非常模仿 class 名称:

foo-bar.ts 对于 class FooBar

这是我当前的代码片段,其中我可以使用 VSCode 提供的本机 "capitalize" 语法将 "foo-bar" 转换为 "Foo-bar"TM_FILENAME_BASE 是一个本地变量,它提取不带扩展名的文件名:

"My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
        "() {",
        "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}.FIELD.);",
        "}",
        "",
        "[=11=]"
    ],
    "description": "Creates a function wrapper for a model's attribute."
}

我想将 "foo-bar" 转换为 "FooBar"。

试试这个:

  "My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
      "() {",

      // "\treturn this.get(${TM_FILENAME_BASE/([a-z]*)-*([a-z]*)/${1:/capitalize}${2:/capitalize}/g}.FIELD.);",

      "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}.FIELD.);",

      "}",
      "",
      "[=10=]"
    ],
    "description": "Creates a function wrapper for a model's attribute."
  }

EDIT :2018 年 10 月,\pascalcase 转换被添加到 vscode - 请参阅 commit,但尚未添加到文档中(截至本次编辑之日)。我在上面添加了更简单的转换,它完成了 PascalCase 转换。

已添加演示,在第一个文件名大小写(test-bed-snippets.xxx) 之后使用剪贴板只是为了便于演示各种可能性。

另见 snippet transform to CamelCase

认为用另一个例子来补充 Mark 的出色回答可能会有用。

在我的例子中,我想取一个名字 - 作为 selected 文本 - 并将其转换为 Swift 代码,该代码将实例化一个新的 class 传入变量名称和电子邮件地址。

所以例如我 select John Smith 作为名字,姓氏并转换为:

let johnSmith = User(name: "John Smith", email: "john.smith@foorbar.com")

此代码段如下:

"User": {
        "prefix": "u",
        "body": [
            "\tlet ${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}/} = User(name: \"${TM_SELECTED_TEXT}\", email: \"${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}.${2:/downcase}/}@foobar.com\")\n",
        ],
        "description": "Create User with name and email"
    }