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

参照