尝试在Visual Studio Code中进行搜索替换,我发现它的正则表达式与完整的Visual Studio不同。具体来说,我尝试声明一个名为string (?<p>[\w]+)
的命名组,该组在Visual Studio中工作,但在Visual Studio Code中不工作。它会对错误Invalid group
抱怨。
除了解决这个特定问题外,我还在寻找有关Visual Studio Code中Regexes风格的信息以及在哪里找到有关它的文档,因此我可以帮助自己处理我可能偶然发现的任何其他问题。 / p>
完整的Visual Studio使用.NET正则表达式,如文档here所示。这个链接在Stackoverflow的其他地方被提到作为VS Code的文档,但它不是。
答案 0 :(得分:130)
Rob Lourens of MSFT写道,文件搜索使用Rust正则表达式。 Rust language documentation描述了语法。
Alexandru Dima of MSFT写道,find小部件使用JavaScript正则表达式。正如Wicktor评论的那样,ECMAScript 5's documentation描述了语法。 MDN JavaScript Regular Expression Guide也是如此。
文件侧栏中的查找不支持(?=foobar)
,而文件中的查找小部件确实支持该前瞻语法。
要查找/替换群组,请使用括号()
进行分组,并使用$1
,$2
,$3
,$n
进行分组。
这是一个例子。
在:
后:
答案 1 :(得分:5)
Shaun's answer仍然正确,但是要添加更新,请recently VS Code added选择使用基于基于Perl的PCRE2引擎的选项。您可以通过设置配置启用此功能。
这使您可以执行更高级的正则表达式操作,例如 lookaheads和backreferences 。但是,正如下面的noted一样,该正则表达式仍必须是有效的JavaScript正则表达式。
VS Code确实支持正则表达式搜索,但是, 默认情况下不支持反向引用和环顾四周。但是你可以 通过设置 search.usePCRE2 启用这些功能。这将配置ripgrep 使用PCRE2正则表达式引擎。尽管PCRE2支持许多其他功能 功能,我们仅支持在仍然有效的正则表达式 JavaScript ,因为仍使用该编辑器的 基于JavaScript的搜索。
要获得奖励,如果您最终在这里尝试进行多行搜索,VS Code recently added that feature as well!
答案 2 :(得分:1)
我发现了有关它的较新信息(2020年7月22日)。
IllusionMH在Github中留下了以下comment:
ripgrep(与PCRE2兼容)已用于文件中的查找 功能(用于非开放式编辑器)和JS引擎仅用于开放式 编辑。