Visual Studio Code使用什么样的Regex?

Eri*_*ric 105 regex replace visual-studio-code

尝试在Visual Studio Code中进行搜索替换,我发现它的正则表达式与完整的Visual Studio不同.具体来说,我尝试声明一个string (?<p>[\w]+)在Visual Studio中工作而不在Visual Studio Code中工作的命名组.它会抱怨错误Invalid group.

除了解决这个特定的问题,我正在寻找有关Visual Studio Code中Regexes风格的信息以及在哪里可以找到有关它的文档,因此我可以帮助自己处理我可能偶然发现的任何其他问题.

完整的Visual Studio使用此处记录的.NET正则表达式.这个链接在Stackoverflow的其他地方被提到作为VS Code的文档,但事实并非如此.

Sha*_*tin 147

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

MSFT的Rob Lourens写道,文件搜索使用Rust正则表达式.该锈语言文档描述的语法.

GitHub上的Rob Lourens

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

MSFT的Alexandru Dima写道,find小部件使用JavaScript正则表达式.正如Wicktor评论的那样,ECMAScript 5的文档描述了语法.如此做MDN JavaScript的正则表达式指南.

Alexandre Dima在GitHub上

测试差异

文件侧栏中(?=foobar)的查找不支持,而文件中的查找小部件确实支持该前瞻语法.

显示在窗口小部件中工作但未在侧边栏中工作的前瞻.

关于查找/替换组

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

这是一个例子.

之前:

这是替换之前的文本.

后:

这是替换后的文本.

  • 不再正确了 https://github.com/microsoft/vscode/issues/72459 (4认同)
  • 可以在这里调试正则表达式:https://rustexp.lpil.uk (2认同)
  • @PeterMortensen 您现在可以在搜索侧栏中使用环视(也是否定的)。 (2认同)

pro*_*ion 7

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

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

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

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

在此处输入图片说明

  • [看起来该设置已被弃用](https://github.com/microsoft/vscode-docs/issues/2325#issuecomment-542483759),并且当默认引擎不支持某项功能时,PCRE2 会自动用作后备。 (2认同)

v.s*_*ian 5

我找到了有关它的更新信息(2020 年 7 月 22 日)。

IllusionMH在 GitHub 上留下了以下评论:

ripgrep(与 PCRE2 兼容)已用于在文件中查找功能(对于未打开的编辑器),并且 JS 引擎仅用于打开的编辑器。