0

我目前正在使用:s/(-[a-z].*-)([a-z])/$1\U$2/.,但是这只是删除第二个之后的字符-而不是将其转换为大写变体?

我有一个 CSS 文件,我有几个条目,格式为 、 、ql-font-timesnewroman等。我想将它们转换为、、等。ql-font-arialql-font-genevaql-font-Timesnewromanql-font-Arialql-font-Geneva

我将 VSVim 与 VSCode 一起使用,我不确定它使用的是哪个版本的 Regex(但我相信它是 Javascript 变体)。

如果我使用 PHP 变体,它可以正常工作。(https://regex101.com/r/8aZI2m/1

但是,如果我使用 Javascript 变体,它只会U在结果中添加一个:ql-font-Utimesnewroman.

在 VSCode 中,它更进一步,只是插入\U。( ql-font-\Utimesnewroman)。

如果我将正则表达式更改为看起来更像, :s/(-[a-z].*-)([a-z])/$1/\U$2/.,它会继续并删除第二个匹配项,而不是将其转换为大写 ( ql-font-imesnewroman)

VSVim / VSCode 是否需要任何特殊语法才能使其正则表达式正确匹配并替换为大写?

4

1 回答 1

0

vscode v1.47 正在添加对查找/替换大小写修饰符的支持,例如\u等。请参阅https://stackoverflow.com/a/62270300/836330

在您的情况下,您可以使用它作为替换:

 $1\u$2   // \u as you are only capitalizing a single letter

[我不熟悉 VSVIM,所以请告诉我们是否s/(-[a-z].*-)([a-z])/$1\u$2/.适合您。]


老答案:

在 keybindings.json 中尝试这个键绑定,它会插入一个片段,以便您可以使用转换:

 {
    "key": "alt+b",              // whatever keybinding you wish
    "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "${TM_SELECTED_TEXT/-font-(\\w+)/-font-${1:/capitalize}/g}""
    },
  },

您首先选择文本,然后触发代码段。

这将适用于:

ql-font-timesnewroman
// unrelated text here can be selected to and it will be unaffected.**
ql-font-arial

ql-font-timesnewroman, ql-font-arial, ql-font-geneva  // all in one line

如果您的选择包含不相关的文本,它将保持不变,除非它与-font-(\\w+)片段使用的正则表达式匹配——这通常看起来不太可能。

如果您在一个文件中有很多这些,并且您不喜欢选择整个文件并应用此转换,那么首先使用-font-(\w+)正则表达式查找(注意无需\w在 Find 小部件中双重转义,但您必须\\w在片段中使用! ) 和Alt+Enter将选择所有匹配项,然后您可以触发该片段。

于 2020-04-02T18:06:45.027 回答