VSCode 正则表达式查找和替换子匹配数学?

Posted

技术标签:

【中文标题】VSCode 正则表达式查找和替换子匹配数学?【英文标题】:VSCode regex find & replace submatch math? 【发布时间】:2016-04-09 16:09:21 【问题描述】:
%s@fileID: \(213[0-9]*\)@\='fileID: '.(submatch(1)-1900)@

我在 vim 中使用这个正则表达式搜索和替换命令从每个匹配的 id 中减去一个常数。

我可以在 VSCode 中查找正则表达式,但如何引用 submatch 进行数学运算和替换? submatch(1) 在 VSCode 中不起作用?

谢谢。

【问题讨论】:

【参考方案1】:

给定正则表达式(foobar),如果替换输入字段中有更多组,您可以使用$1 引用第一个组,依此类推。

【讨论】:

在这里再次询问:***.com/questions/35283300/… 对于 2000 行文件,我必须将 <p>(.*)</p> 替换为 <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>。想象一下我手动操作。 ... 和 $0 来引用完整匹配的字符串(不需要括号)。如果您想添加到搜索字符串中,这很有用,例如将 "Bond" 替换为 "$0, James $0" 别忘了点击 .* 按钮告诉 vsc 你输入了正则表达式【参考方案2】:

用一个例子来补充本杰明的答案:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

括号中的任何内容都可以是正则表达式。

【讨论】:

这个提醒我,如果我对 if 语句执行正则表达式,我应该转义括号。【参考方案3】:

再补充一个例子:

我正在替换 img html 标记中的 src attr,但我只需要替换 src 并保留 img 声明和 src 属性之间的任何文本。

我使用了如图所示的查找+替换工具 (ctrl+h):

【讨论】:

对我来说这工作不一致 - 虽然选择分叉正确,但输出有时会保持 $1 没有替换 嗨,@godblessstrawberry,你能分享你的搜索和替换字符串吗? 嗨@Diogo 我试图用myTranslate="$1" 替换项目范围内的\[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*",它会随机跳过键并有时插入$1 而不是组值。更新到 1.28.0 解决了这个问题 我遇到了与@godblessstrawberry 相同的问题,使用正则表达式' (and|or\+|\-)\n( *)' 和替换字符串对我的所有文件进行全局替换'\n$2$1 ' 有时会正确地将二元运算符移动到换行符的开头,但在其他情况下只是插入 $2$1。似乎是 VSCodium 中的一个错误 @godblessstrawberry,检查一下:github.com/microsoft/vscode/issues/81825。如果它不适用于您,请提供更多信息并在那里打开一个问题。【参考方案4】:

在我的情况下,$1 不起作用,但 $0 对我来说可以正常工作。

在这种情况下,我试图用正确的格式替换字符串以在 Laravel 中翻译它们,我希望这对其他人有用,因为我花了一些时间来整理它!

Search: (?<=<div>).*?(?=</div>)
Replace:  __('$0') 

Regex Replace String for Laravel Translation

【讨论】:

您可以复制您的编辑帖子并复制代码而不是图像吗?可视化效果会更好。【参考方案5】:

另一个简单的例子:

Search: style="(.+?)"
Replace: css=css`$1`

用于将 HTML 转换为带有情感/css 的 JSX!

【讨论】:

【参考方案6】:

对于初学者来说,公认的答案是正确的,但如果您对 VSC 或 Regex 都不太熟悉,那就有点简洁了。

所以,如果这是您第一次接触:

要查找和修改文本,

    在“查找”步骤中,您可以将正则表达式与“捕获组”一起使用,例如I want to find (group1) and (group2),使用括号。这将找到与I want to find group1 and group2 相同的文本,但不同之处在于您可以在下一步中引用group1group2

    在“替换”步骤中,可以通过$1$2等方式引用捕获组,因此可以将语句改为I found $1 and $2 having a picnic,即输出I found group1 and group2 having a picnic.

注意事项:

() 内部或外部的任何内容都可以是正则表达式,而不仅仅是一个字符串。

$0指的是整场比赛

【讨论】:

老实说,像我这样的初学者的最佳答案regex

以上是关于VSCode 正则表达式查找和替换子匹配数学?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript正则表达式修饰符

iOS之正则表达式

python 正则表达式

正则表达式查找匹配后如何替换?

正则表达式之基础

notepad++正则表达式替换字符串详解