ChatGPT解决这个技术问题 Extra ChatGPT

Visual Studio Code 使用什么风格的 Regex?

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

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

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

VSCode 使用的是基于 JavaScript 的正则表达式引擎,但并不相同。您不能在那里使用命名的捕获组。
没有关于 VSCode 中使用的正则表达式的具体文档。但是,如果您查看 source code,您会发现周围有很多 JS 代码。如果您尝试使用lookbehinds,您会得到无效的模式错误,而lookaheads 工作。 JS 正则表达式风格是唯一将 [^] 模式视为匹配任何符号的正则表达式引擎。所以,很明显它是 JS 正则表达式引擎。
标准是ECMAScript 5
好的。好吧,如果您确定并且您有一些指向文档的链接,您可以回答。我会投票。如果 ECMAScript 规范是唯一的,不要认为它是一个很好的链接。
那么,你期待什么样的答案呢?我在上面发布的所有内容+指向 JS 正则表达式语法描述的链接?喜欢MDN reference

S
Shaun Luttin

文件侧栏中的查找/替换中的 Rust 正则表达式

Rob Lourens of MSFT 写道,文件搜索使用 Rust 正则表达式。 Rust language documentation 描述了语法。

https://i.stack.imgur.com/XSq5F.png

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

Alexandru Dima of MSFT 写道,查找小部件使用 JavaScript 正则表达式。正如 Wicktor 评论的那样,ECMAScript 5's documentation 描述了语法。 MDN JavaScript Regular Expression Guide 也是如此。

https://i.stack.imgur.com/HeiEz.png

测试差异

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

https://i.stack.imgur.com/PTvcq.png

关于查找/替换组

要查找/替换组,请使用括号 () 进行分组,使用 $1$2$3$n 进行替换。

这是一个例子。

前:

https://i.stack.imgur.com/Lo9Ce.png

后:

https://i.stack.imgur.com/tBPeI.png


可以在此处调试正则表达式:rustexp.lpil.uk
p
protoEvangelion

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

https://i.stack.imgur.com/m8Gwq.png


PCRE2 可以在设置菜单中激活。转到首选项~设置并搜索“正则表达式”
Looks like that setting is deprecated,并且当默认引擎不支持某个功能时,PCRE2 会自动用作后备。
v
v.slobodzian

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

IllusionMH 在 Github 中留下了以下 comment

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