Visual Studio 代码中的正则表达式:无效匹配失败并出现“无法识别的标志”错误

Ugu*_*gur 4 regex visual-studio-code

编辑:正如一些评论者指出的那样,它应该是^class (?!Migration)[A-Z][a-z]*。但 VS Code 抱怨:Error parsing regex near "ss (?!Migr' at character offset 9: Unrecognized flag: '!'. (Allowed flags: i, m, s, U, u, x.)

Visual Studio似乎支持负向预测(请参阅“使匹配无效”)。如果 VSCode 确实支持,则无法找到问题的答案。


在 VS Code 中,我尝试通过 .django 在 Django 项目中查找类定义Shift+Command+F。打开正则表达式搜索。现在我的搜索模式是这样的:

^class [A-Z][a-z]*

因此,每次出现“class Abc”(其中 Abc 是类名)都会被找到。

现在我想排除像class Migration(...)或这样的类class Command(...)

我尝试用否定的前瞻来做到这一点,如下所示:

^class (!?Migration)[A-Z][a-z]*

但这是行不通的。VS Code 将向我显示所有名为 的类class Migration(...),因此它不会排除它,而是会重点关注它。

我缺少什么?

Wik*_*żew 6

更新:

由于迁移到Electron 3.0 ,您可以在正则表达式中自由使用环视,包括前向和后向。由于从 Chromium 62 和 Node 8.10.0 开始就支持环视,并且 Electron 3.0 使用 Chromium 66 和 Node 10.2.0,因此现在支持它们开箱即用。

PCRE2 选项是

已弃用。当使用仅 PCRE2 支持的正则表达式功能时,将自动使用 PCRE2。

请注意,从 VS Code 1.31 开始,甚至支持无限宽度的后视

旧版本的先前答案

请注意,要使具有前瞻功能的模式发挥作用,您需要编辑settings.json文件来设置

"search.usePCRE2": true
Run Code Online (Sandbox Code Playgroud)

请参阅v1.29 发行说明

现在还可以通过设置在正则表达式搜索中使用反向引用和前瞻断言"search.usePCRE2": true。这将 ripgrep 配置为使用 PCRE2 正则表达式引擎。虽然 PCRE2 支持许多其他功能,但我们仅支持在 JavaScript 中仍然有效的正则表达式,因为仍然使用编辑器的基于 JavaScript 的搜索来搜索打开的编辑器。

另外,请参阅马克的回答,他早些时候注意到了这个选项。

然后,你的^class (?!Migration)[A-Z][a-z]*正则表达式就会起作用。

在此输入图像描述

  • 请注意,不再需要此设置:“已弃用。当使用仅 PCRE2 支持的正则表达式功能时,将自动使用 PCRE2。” (8认同)