src/content/docs/linter/rules/no-useless-regex-backrefs.mdx
import { Tabs, TabItem } from '@astrojs/starlight/components';
<Tabs> <TabItem label="JavaScript (and super languages)" icon="seti:javascript"> ## Summary - Rule available since: `v2.0.0` - Diagnostic Category: [`lint/suspicious/noUselessRegexBackrefs`](/reference/diagnostics#diagnostic-category) - This rule is **recommended**, meaning it is enabled by default. - This rule doesn't have a fix. - The default severity of this rule is [**warning**](/reference/diagnostics#warning). - Sources: - Same as [`no-useless-backreference`](https://eslint.org/docs/latest/rules/no-useless-backreference) - Same as [`regexp/no-useless-backreference`](https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-backreference.html){
"linter": {
"rules": {
"suspicious": {
"noUselessRegexBackrefs": "error"
}
}
}
}
Disallow useless backreferences in regular expression literals that always match an empty string.
A backreference refers to the submatch of a previous capturing group and matches the same text as that group. JavaScript regular expression support two syntaxes:
\N where N is a 1-based integer that refers to the N-th declared capturing group.\k<name> that refers to the capturing group named name.
This syntax is only available in Unicode-aware regular expressions,
i.e. regular expressions using the u or v flag.A backreference always matches an empty string when it refers to:
A group that belongs to another alternate branch.
In /(a)|b\1b/, the group (a) and its backreference \1 are in distinct alternate branches.
/(a)|b\1/ is equivalent to (a)|b/.
A group that appears after the backreference.
In /\1(a)/, the group (a) is declared after its backreference \1.
/\1(a)/ is equivalent to (a)/.
A group in which the backreference is declared.
In /(\1)/, the backrefernce is nested in the group it refers to.
/(\1)/ is equivalent to /()/.
A group that is inside a negative lookaround assertion without the backreference.
In /a(?!(b)).\1/, the backrefernce is in a negative assertion while its backreference is outside.
/a(?!(b)).\1/ is equivalent to /a(?!(b))./.
A group that is declared before the backreference inside a lookbehind assertion.
In /(?<=(a)\1)b/, the backreference appears after the group while they are in a lookbehind assertion.
/(?<=(a)\1)b/ is equivalent to /(?<=(a))b/.
A backreference that always matches an empty string is always successfully matched and is therefore useless.
/(a)|b\1/;
/\1(a)/;
/(\1)/;
/a(?!(b)).\1/;
/(?<=(a)\1)b/;
/(a)\1/;
/(?<foo>a)\k<foo>/u;
/a(?!(b|c)\1)./;