【问题标题】:How to use Regex to 'uppercase and replace' in Visual Studio Code's snippets?如何在 Visual Studio 代码片段中使用正则表达式“大写和替换”?
【发布时间】:2019-05-03 10:01:42
【问题描述】:

我想在 Visual Studio Code 1.33.1 上创建一个 sn-p,它使用文件名创建一个 C++ 类。
首先,我要设置“include guard”,重点是使用文件名,替换每个'.'用“_”将其全部设置为大写(标准):
#ifndef FILE_CLASS_HPP //filename: File.class.hpp

VSC documentation 为文件名提供了一些变量,还有一些正则表达式可以更改为全大写并用另一个字符替换一个字符。
重点是:由于我对正则表达式一无所知,所以我从来没有做到这两点。

我尝试手动加入正则表达式,但没有成功:
#ifndef ${TM_FILENAME/(.*)/${1:/upcase}/[\\.-]/_/g}

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

【问题讨论】:

  • @TimBiegeleisen 您链接的帖子可追溯到 2012 年。您可以在 VSC Documentation 的示例中看到,可以使用正则表达式进行大写。
  • 纯正则表达式很难做到这一点。 #ifndef 名称中是否有固定数量的点,还是可以有任意数量的点?
  • @TimBiegeleisen 不幸的是,点的数量是任意的。似乎有一个正则表达式可以用另一个想法替换所有出现的字符:[\\.-]/_/g。我只是不知道如何将它与全大写的正则表达式结合起来。
  • 是的,但问题是,您想到的正则表达式只有在您已经将字符串隔离并在手时才有效,这里 不是 的情况。对于大写,你有同样的问题。

标签: regex visual-studio-code code-snippets


【解决方案1】:

这应该可行:

"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}

_'s 替换所有group2s ''s

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

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

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2021-08-19
    • 2011-11-29
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2021-02-05
    • 2017-09-20
    相关资源
    最近更新 更多