JetBrains Rider 2025.2 Help

正则表达式辅助功能

JetBrains Rider 提供了一套丰富的工具来处理 .NET 正则表达式。 您可以快速分析现有表达式,查找并修复错误。 在输入新表达式时,JetBrains Rider 会帮助您自动完成和验证。

字符串文本中的正则表达式

默认情况下,JetBrains Rider 仅处理 模式 参数中的正则表达式,以及 Regex 类的方法。 然而,包含正则表达式的字符串可以定义在不同的位置:字符串常量、字段、其他方法的参数等。 如果您希望 JetBrains Rider 将字符串作为正则表达式处理,您有三种不同的选项:

  • 使用上下文操作:将光标放在字符串中,按 Alt+Enter 并选择 标记为 .NET 正则表达式

    JetBrains Rider 将标记与字符串对应的符号范围为正则表达式,将此范围保存在其内部数据库中,并在包含文件更改时持续跟踪。 这种方式非常快速且直接,但有两个缺点:范围可能在外部文件更改(如 VCS 合并)后丢失,并且以这种方式标记的注入仅在本地跟踪。

    如果您稍后决定禁用将字符串作为正则表达式处理,可以使用 移除 .NET 正则表达式标记 上下文操作。

  • 另一种方法是使用 [RegexPatternAttribute]JetBrains.Annotations 注释您的自定义方法参数、公共字段或属性为正则表达式。

    如果您的项目目标是 .NET 7 或更高版本,您还可以使用 [StringSyntaxAttribute] 和相应的构造函数: [StringSyntax(StringSyntaxAttribute.Regex)]

    JetBrains Rider 将在方法调用和赋值中将相应的参数处理为正则表达式:

    参数中的正则表达式高亮
  • 第三种方法是在字符串文本之前添加注释 /*language=regexp|jsregexp*/。 这些注释需要一些输入,可能会污染您的代码,但另一方面,它们可以让阅读您代码的每个人清楚您的意图,它们不会丢失,并且任何打开您的代码的人都可以在标记的字符串中使用 JetBrains Rider 的相同功能。 顺便说一下,这些注释的格式与 基于 IntelliJ 平台的 IDE 兼容。

    在 C# 字符串中通过注释注入正则表达式

语法高亮显示

JetBrains Rider 会高亮正则表达式中的语法结构、错误和冗余:

正则表达式的高亮

高亮颜色具有以下含义:

  • 浅蓝色 – 字符类、锚点和量词

  • 浅绿色 – 分组结构

  • 橙色 – 集合结构

  • 粉色和浅粉色 – 转义序列

  • 绿色 – 注释

  • 红色带波浪下划线 – 错误

  • 蓝色波浪下划线 – 警告

当您将光标放置在分隔符之一时,组、组名称和集合中的匹配括号会被高亮。

默认情况下,JetBrains Rider 会高亮所有非逐字字符串中的正确和错误转义序列:

字符串中转义序列的高亮

修复错误

要修复正则表达式中的错误,请将光标放在红色高亮处,按 Alt+Enter ,然后选择相应的 快速修复

正则表达式错误最常见的例子是误用转义字符。

正则表达式错误

JetBrains Rider 帮助您自动修复错误:

使用 JetBrains Rider 修复正则表达式错误

IntelliSense

JetBrains Rider 为几乎所有 .NET 正则表达式结构提供智能感知支持。 在补全列表中,每个结构都会显示简要描述。

正则表达式中的代码补全

在正则表达式中,您可以使用以下类型的智能感知:

在使用 Match.Groups 属性 时,您也可以从 JetBrains Rider 的智能感知中受益。 JetBrains Rider 会检测表达式中的组名称,并在补全列表中建议它们:

组名称补全

提取预编译的正则表达式

如果您需要重用一个在 正则表达式 类的静态方法中使用的正则表达式,您可以将其提取为预编译的正则表达式。

要提取正则表达式,请将光标放在方法调用中的任意位置,按 Alt+Enter 并选择 转换为预编译正则表达式 上下文操作。

例如,您可以从 模式 参数中提取 IsMatch 方法的正则表达式:

public void Bar() { var result = Regex.IsMatch("Input", "Pattern"); }

应用上下文操作后,模式将被提取到一个静态字段中:

private static readonly Regex Regex1 = new Regex("Pattern"); public void Bar() { var result = Regex1.IsMatch("Input"); }
最后修改日期: 2025年 9月 26日