Visual Studio Code使用哪种Regex风格?


130

尝试在Visual Studio Code中进行搜索替换,我发现它的Regex风格不同于完整的Visual Studio。具体来说,我尝试声明一个命名组,string (?<p>[\w]+)该命名组可以在Visual Studio中使用,但不能在Visual Studio Code中使用。它会报错Invalid group

除了解决此特定问题外,我还在寻找有关Visual Studio Code中Regexes风格的信息以及在何处可以找到有关此文档的信息,因此我可以帮助自己解决可能遇到的任何其他问题。

完整的Visual Studio使用.NET正则表达式,如此处所述。该链接在Stackoverflow上的其他地方被称为VS Code的文档,但事实并非如此。


VSCode使用基于JavaScript的正则表达式引擎,但事实并非如此。您不能在那里使用命名的捕获组。
WiktorStribiżew17年

1
VSCode中使用的正则表达式没有特定的文档。但是,如果您查看源代码,将会看到很多JS代码。如果您尝试使用先行搜索,则在先行工作时会收到无效的模式错误。JS正则表达式风格是唯一将[^]模式视为与任何符号匹配的正则表达式引擎。因此,很明显它是JS正则表达式引擎。
WiktorStribiżew17年


1
好。好吧,如果您确定并且有一些文档链接可以回答。我会投票。如果ECMAScript规范是唯一的规范,请不要认为它是一个很好的链接。
埃里克

1
那么,您希望得到什么样的答案?我在上面发布的所有内容以及JS regex语法说明的链接?喜欢MDN参考吗?
WiktorStribiżew17年

Answers:


170

在文件边栏中查找/替换中的Rust Regex

MSFT的Rob Lourens写道,文件搜索使用Rust regex。该锈语言文档描述的语法。

Rob Lourens在GitHub上

在文件小部件中查找/替换中的JavaScript正则表达式

MSFT的Alexandru Dima写道,查找小部件使用JavaScript正则表达式。正如Wicktor所说,ECMAScript 5的文档描述了该语法。《MDN JavaScript正则表达式指南》也是如此

GitHub上的Alexandru Dima

测试差异

“文件中查找”边栏不支持,(?=foobar)而“文件中查找”小部件则支持该先行语法。

显示在窗口小部件中起作用但不在侧边栏中的前瞻。

关于使用组查找/替换

要查找/与组,使用括号替换()到组$1$2$3$n来代替。

这是一个例子。

之前:

这是替换之前的文本。

后:

这是替换后的文本。


12

Shaun的答案仍然是正确的,但是为了添加更新,最近VS Code添加了选择使用基于Perl的PCRE2引擎的选项。您可以通过设置配置启用此功能。

这使您可以执行更高级的正则表达式操作,例如前瞻和反向引用。但正如指出的下方,正则表达式还必须是有效的JavaScript正则表达式

VS Code确实支持正则表达式搜索,但是默认情况下不支持反向引用和环视。但是您可以使用设置search.usePCRE2启用它们。这会将ripgrep配置为使用PCRE2正则表达式引擎。尽管PCRE2支持许多其他功能,但我们仅支持在JavaScript仍然有效的正则表达式,因为仍然使用基于JavaScript的搜索来搜索打开的编辑器。

另外如果您最终在这里尝试进行多行搜索,那么VS Code最近也增加了该功能

在此处输入图片说明


可以在设置菜单中激活PCRE2。转到“首选项〜设置”并搜索“ regex”
DougR '19

似乎已弃用该设置,并且当默认引擎不支持功能时,PCRE2自动用作后备。
Kevin Rak
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.