Skip to content
← Back to rules

eslint/no-useless-backreference 正确性

This rule is turned on by default.

它做了什么

禁止在正则表达式中使用那些在评估时永远会被忽略的反向引用,因为其所指向的捕获组尚未匹配且无法匹配。

为什么这是个问题?

无用的反向引用可能导致令人困惑或误导性的正则表达式。它们可能会让人误以为某个分组的值被重复使用了,但由于模式结构(例如评估顺序、选择项或负向先行断言)的原因,该分组实际上并未匹配任何内容——因此引用始终解析为空字符串。这种情况几乎总是错误的,会使正则表达式更难理解与维护。

示例

此规则的 错误 代码示例:

js
/\1(a)/; // 反向引用出现在分组之前
/(a|\1b)/; // 分组与引用位于不同的可选分支中
/(?<=\1(a))b/; // 反向引用在回顾型断言中使用于分组之前
/\1(?!(a))/; // 分组位于负向前瞻中
/(a\1)/; // 反向引用在其自身分组内部

此规则的 正确 代码示例:

js
/(a)\1/; // 合法 —— 反向引用跟在已完成的分组之后
/(?<name>a)\k<name>/; // 命名分组使用得当
/(?:a|(b))\1/; // 只有在分组匹配时才使用反向引用

如何使用

通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "no-useless-backreference": "error"
  }
}
bash
oxlint --deny no-useless-backreference

参考资料