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
相同的文本,但不同之处在于您可以在下一步中引用group1
和group2
:
在“替换”步骤中,可以通过$1
、$2
等方式引用捕获组,因此可以将语句改为I found $1 and $2 having a picnic
,即输出I found group1 and group2 having a picnic.
注意事项:
()
内部或外部的任何内容都可以是正则表达式,而不仅仅是一个字符串。
$0
指的是整场比赛
【讨论】:
老实说,像我这样的初学者的最佳答案regex
。以上是关于VSCode 正则表达式查找和替换子匹配数学?的主要内容,如果未能解决你的问题,请参考以下文章