regex - Vs Code 在捕获组结果上执行正则表达式:\u 替换修饰符不起作用
问题描述
我有这个示例字符串:
registerForm.main.myApplicant = value
我需要将其替换为:
registerForm.main.getMyApplicant() = value
我想出的正则表达式是:
\w+\.\w+\.(\w)(\w+)
where $1
equalsm
需要转换成大写。并且$2
等于需要()
附加的单词的其余部分。
当我做:
FIND: \w+\.\w+\.(\w)(\w+)
REPLACE: get\u$1$2()
它只是打印出 \u 而不是大写。如何在捕获组上执行正则表达式$1
?
我也试过$1=\u$1
这是一个正则表达式演示
解决方案
新答案[将在 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
相当容易。然后将片段保留为骨架,以用于将来查找/替换大小写或条件转换。通常,内部正则表达式(在此处的代码段中(.*\\.)(.*)
)相对简单,因为它仅对您预先选择的条目起作用,因此转换更容易理解。
推荐阅读
- java - 如何在 Debian 10 Buster 上安装 Oracle jdk 15
- model-view-controller - Sencha Ext JS - how to refresh the Tabs after date picking?
- php - PHP + mysql:从包含存款,收益和取款的交易列表中计算个人利润的最简单方法是什么
- java - 如何在java中更改窗口应用程序中的背景颜色
- laravel - Laravel - 当前状态为1时如何将所有状态设置为0
- asp.net-core - RDLC 表达式
- angular - 单元测试错误 - 预期对象 ({ message: 'error message' }) 等于 'error message'
- php - 创建第二个 single.php 文件
- java - 如何在 JPA 查询语法中引用映射的超类字段?
- javascript - 在我 SlideUp 另一个 div 后,如何阻止我的中心 div 改变位置?