首页 > 解决方案 > Vs Code 在捕获组结果上执行正则表达式:\u 替换修饰符不起作用

问题描述

我有这个示例字符串:

registerForm.main.myApplicant = value

我需要将其替换为:

registerForm.main.getMyApplicant() = value

我想出的正则表达式是:

\w+\.\w+\.(\w)(\w+)

where $1equalsm需要转换成大写。并且$2等于需要()附加的单词的其余部分。

当我做:

FIND:    \w+\.\w+\.(\w)(\w+)
REPLACE: get\u$1$2()

它只是打印出 \u 而不是大写。如何在捕获组上执行正则表达式$1

我也试过$1=\u$1

这是一个正则表达式演示

标签: regexsearchreplacevisual-studio-code

解决方案


新答案[将在 v1.47 中]

[它(支持 \U \u \L \l 替换修饰符)于 2020 年 6 月 30 日在 Insiders' Build 中,因此它将在同一周晚些时候发布在 1.47 中。]

(参见https://github.com/microsoft/vscode/pull/96128:初始实现:支持 \U \u \L \l 替换修饰符)。

对大小写修饰符 \U、\u、\L 和 \l 的查找/替换支持即将推出。在跨文件搜索功能中尚不支持它们的使用,但这是计划好的。

寻找 :(\w+\.\w+\.)(\w)(\w+)

Replace : $1get\u$2$3() -- 要支持的 PR\u已合并

https://regex101.com/r/jZlO1D/1

有关 case 修饰符如何在 vscode 中工作的更多信息,请参阅https://stackoverflow.com/a/62270300/836330



只需设置一个片段来为您进行替换。为什么?因为片段可以转换为大写和小写并轻松大写捕获组。另外,虽然你在这里不需要它,但他们也可以进行条件替换,这对你来说非常强大。

这是一个简单的片段:

{
  "key": "shift+alt+y",                          // whatever keybinding you choose
  "command":  "editor.action.insertSnippet",
  "args": {

        // see how simple this regex can be after you have found and selected your matches
    "snippet": "${TM_SELECTED_TEXT/(.*\\.)(.*)/$1get${2:/capitalize}()/g}"

  },
  "when": "editorTextFocus && editorHasSelection"
},

您仍然必须找到要更改的内容,如果需要,可以使用原始正则表达式

\w+\.\w+\.(\w)(\w+)

我建议(.+\.)([^\.\s]+)(?!.*\.)查看https://regex101.com/r/NbXgs3/2它处理一些边缘情况。

并允许您拥有更深的结构,例如,等等registerForm.main.subMain.myApplicant,最多不超过任何数量或更少registerForm.myApplicant

  • 第 1 步:将您的正则表达式输入到“查找”小部件中。
  • 第 2 步: Alt+Enter选择所有找到的匹配项。
  • 第 3 步:在此处触发您的代码段 Shift+ Alt+Y

相当容易。然后将片段保留为骨架,以用于将来查找/替换大小写或条件转换。通常,内部正则表达式(在此处的代码段中(.*\\.)(.*))相对简单,因为它仅对您预先选择的条目起作用,因此转换更容易理解。

getFunction 片段演示


推荐阅读