RegExp 中的代码检查
本主题列出了 RegExp 中所有 JetBrains Rider 代码检查。
您可以在 编辑器 | 检查设置 | 检查严重性 | 其他语言 设置页面  Ctrl+Alt+S 上切换特定检查或更改其严重性级别。
检查 | 描述 | 默认严重性 |
|---|---|---|
匿名捕获组或数字反向引用 | 报告 RegExp 中的匿名捕获组和数字反向引用。 仅当 RegExp 方言支持命名组和命名组引用时才会报告这些内容。 命名组和命名反向引用可以提高代码可读性,并建议使用它们。 当不需要捕获时,通过使用非捕获组(即 示例:
(\d\d\d\d)\1
更好的正则表达式模式可能如下所示:
(?<quad>\d\d\d\d)\k<quad>
2017.2 新增 | |
意外位置的起始或结束锚点 | 报告在模式开头未出现的 示例:
(Price $10)
2018.1 中新增 | |
连续空格 | 报告 RegExp 中的多个连续空格。 由于空格默认不可见,因此很难看清需要多少个空格。 通过将连续空格替换为单个空格和计数量词,可以使 RegExp 更加清晰。 示例:
( )
应用快速修复后:
( {5})
2017.1 中的新功能 | |
自定义 RegExp 检查 | 自定义正则表达式检查 | |
替换分支中的重复项 | 报告 RegExp 替换分支中的重复项。 重复的分支会减慢匹配速度并使表达式的意图变得模糊。 示例:
(alpha|bravo|charlie|alpha)
应用快速修复后:
(alpha|bravo|charlie)
2017.1 中的新功能 | |
字符类中的重复字符 | 报告 RegExp 字符类中的重复字符。 重复字符是不必要的,可以在不改变正则表达式语义的情况下删除。 示例:
[aabc]
应用快速修复后:
[abc]
| |
交替中的空分支 | 报告 RegExp 交替中的空分支。 空分支只会匹配空字符串,在大多数情况下,这并不是所期望的。 此检查不会报告交替开头或结尾的单个空分支。 示例:
(alpha||bravo)
应用快速修复后:
(alpha|bravo)
2017.2 新增 | |
转义的元字符 | 报告转义的元字符。 某些 RegExp 编码风格规定元字符应放在字符类中,以使正则表达式更易于理解。 此检查不会警告元字符 示例:
\d+\.\d+
应用快速修复后:
\d+[.]\d+
2017.1 中的新功能 |
|
八进制转义 | 报告容易与反向引用混淆的八进制转义。 使用十六进制转义以避免混淆。 示例:
\07
应用快速修复后:
\x07
2017.1 中的新功能 |
|
冗余的 '\d'、'[:digit:]' 或 '\D' 类元素 | 报告在一个类中与 示例:
[\w\d]
应用快速修复后:
[\w]
2022.2 新增 | |
冗余的字符转义 | 报告可以用未转义字符替换且保持含义的冗余字符转义序列。 许多在字符类外部必要的转义序列在字符类的方括号 尽管在某些方言(如 JavaScript、Python 等)中,字符类外部未转义的左大括号 示例:
\-\;[\.]
应用快速修复后:
-;[.]
忽略转义的右括号 '}' 和 ']' 选项指定是否在 RegExp 方言允许未转义的情况下报告字符类外部的 2017.3 新增 | |
冗余的嵌套字符类 | 报告不必要的嵌套字符类。 示例:
[a-c[x-z]]
应用快速修复后:
[a-cx-z]
2020.2 中的新功能 | |
正则表达式可以简化 | 报告可以简化的正则表达式。 示例:
[a] xx* [ah-hz]
应用快速修复后:
a x+ [ahz]
2022.1 中的新功能 | |
单字符交替 | 报告正则表达式中的单字符交替。 使用字符类会更简单。 这也可能提供更好的匹配性能。 示例:
a|b|c|d
应用快速修复后:
[abcd]
2017.1 中的新功能 | |
可疑的反向引用 | 报告在运行时无法解析的反向引用。 这意味着反向引用永远无法匹配任何内容。 如果组是在反向引用之后定义的,或者组是在交替的不同分支中定义的,则反向引用将无法解析。 组在其反向引用之后定义的示例:
\1(abc)
组和反向引用在不同分支中的示例:
a(b)c|(xy)\1z
2022.1 中的新功能 | |
不必要的非捕获组 | 报告对匹配结果没有影响的不必要的非捕获组。 示例:
Everybody be cool, (?:this) is a robbery!
应用快速修复后:
Everybody be cool, this is a robbery!
2021.1 中的新功能 |