eslint/no-useless-backreference 正しさ
何を行うか
正規表現内のバックリファレンスが、参照先のキャプチャグループがまだマッチしていないか、評価時にマッチできない状態であるため、常に無視されることになる場合を禁止します。
なぜ悪いのか
不要なバックリファレンスは、誤解や混乱を招く正規表現につながる可能性があります。グループの値が再利用されているように見えるかもしれませんが、パターンの構造(たとえば評価順序、選択肢の並び、ネガティブな後読みなど)により、そのグループはまったくマッチしておらず、結果として参照は常に空文字列に解決されます。これはほぼ確実に意図しないものであり、パターンの理解や保守を困難にします。
例
このルールに対して不正なコードの例:
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