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


204
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

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

我可以在VSCode中找到正则表达式,但是如何submatch为数学引用&替换呢?submatch(1)在VSCode中不起作用?

谢谢。

Answers:



99

用一个例子来扩大本杰明的答案:

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

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


这提醒我,如果我在if语句上执行正则表达式,则应避免使用括号。
发条

65

仅添加另一个示例:

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

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


8
对我来说,这不一致地工作-尽管选择分叉正确,但有时输出仍会保留$1而不需替换
-godblessstrawberry

1
嗨,@ godblessstrawberry,您可以共享您的搜索和替换字符串吗?
Diogo Paschoal,

2
喜@Diogo我试图取代projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"myTranslate="$1"和它随机跳跃键和插入$ 1而不是群体价值的时候。更新到1.28.0解决了此问题
godblessstrawberry

我遇到了与@godblessstrawberry相同的问题,用正则表达式'(and | or \ + | \-)\ n(*)'和替换字符串'\ n $ 2 $ 1'对我的所有文件进行了全局替换将二进制运算符移至换行符的开头,但在其他情况下,只需插入$ 2 $ 1。似乎是在VSCodium的错误
汤姆关闭

@godblessstrawberry,请检查以下内容:github.com/microsoft/vscode/issues/81825。如果它不适合您,请提供更多信息并在那里提出问题。
Diogo Paschoal,

9

在我的情况下,$ 1无效,但$ 0可以正常工作。

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

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

正则表达式替换Laravel翻译的字符串


1
是否可以复制您的编辑帖子并复制代码而不是图像?可视化会更好。
Pankwood

3

对于初学者来说,可接受的答案是正确的,但是如果您对VSC或Regex不那么熟悉,则可以略为简洁。

因此,如果这是您首次与以下任何一家联系:

要查找和修改文本,

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

  2. 在“替换为”步骤中,您可以通过参考捕获组$1$2等等,所以你可以在句子改变I found $1 and $2 having a picnic,这将输出I found group1 and group2 having a picnic.

笔记:

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

  • $0 指整个比赛


2

另一个简单的例子:

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

通过情感/ css将HTML转换为JSX很有用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.