Visual Studio Code 中的正则表达式:使匹配无效失败并显示“未识别的标志”错误

4

编辑:正如一些评论者所指出的那样,应该是^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似乎支持负向先行断言(参见“Invalidate a match”)。找不到答案来回答VSCode是否支持它。


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

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

因此,将找到“class Abc”,其中Abc是类名的每个出现。

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

我尝试使用负向先行断言来做到这一点,就像这样:

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

但是这样行不通。VS Code将向我显示所有名为class Migration(...)的类,因此它不是排除它,而是聚焦于它。

我错过了什么?


1
!? 不是负向先行断言,也许你的意思是 ?! - UnholySheep
2
你的正则表达式中有一个拼写错误。应该使用 ^class (?!Migration)[A-Z][a-z]* - Wiktor Stribiżew
1
答案在这里,文件中的查找功能不支持环视,因为它使用的是ripgrep工具,该工具仅支持某些类型的POSIX正则表达式语法。 - Wiktor Stribiżew
1
尝试这样做:在 settings.json 文件中编辑您的 ripgrep 设置,并设置 "search.useRipgrep": false。然后重试 ^class (?!Migration)[A-Z][a-z]* - Wiktor Stribiżew
1
@Ugur,VScode 已经更新,现在它有 PCRE2 选项。 - Wiktor Stribiżew
显示剩余3条评论
2个回答

6

更新:

由于升级到 Electron 3.0,您可以自由地在正则表达式中使用前瞻和后顾,因为现在支持了 lookarounds。由于 lookarounds 自从 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

请查看v1.29发布说明:

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

另请参见Mark的回答,他早先发现了此选项。

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

enter image description here


8
请注意,此设置已不再需要:“已弃用。当使用仅由PCRE2支持的正则表达式功能时,将自动使用PCRE2。” - MarredCheese
@MarredCheese 很好,我修改了答案以反映这个变化。VSCode的开发非常活跃,这太棒了。 - Wiktor Stribiżew

0
使用一个名为Reverse Search的Visual Studio Code扩展来实现此目的。

免责声明!上述评论的作者也是上述提到的扩展(反向搜索)的作者。 - Hamza Khanzada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接