eslint-plugin-regexp is ESLint plugin for finding RegExp mistakes and RegExp style guide violations.
This ESLint plugin provides linting rules relate to better ways to help you avoid problems when using RegExp.
- Find the wrong usage of regular expressions, and their hints.
- Enforces a consistent style of regular expressions.
- Find hints for writing optimized regular expressions.
- 80 plugin rules for regular expression syntax and features.
You can check on the Online DEMO.
See documents.
npm install --save-dev eslint eslint-plugin-regexp
Requirements
- ESLint v8.44.0 and above
- Node.js v18.x, v20.x and above
Add regexp
to the plugins section of your eslint.config.js
or .eslintrc
configuration file (you can omit the eslint-plugin-
prefix)
and either use one of the two configurations available (recommended
or all
) or configure the rules you want:
The plugin.configs["flat/recommended"]
config enables a subset of the rules that should be most useful to most users.
See lib/configs/rules/recommended.ts for more details.
// eslint.config.js
import * as regexpPlugin from "eslint-plugin-regexp"
export default [
regexpPlugin.configs["flat/recommended"],
];
The plugin:regexp/recommended
config enables a subset of the rules that should be most useful to most users.
See lib/configs/rules/recommended.ts for more details.
// .eslintrc.js
module.exports = {
"plugins": [
"regexp"
],
"extends": [
// add more generic rulesets here, such as:
// 'eslint:recommended',
"plugin:regexp/recommended"
]
}
Override/add specific rules configurations. See also: https://eslint.org/docs/user-guide/configuring.
// eslint.config.js
import * as regexpPlugin from "eslint-plugin-regexp"
export default [
{
plugins: { regexp: regexpPlugin },
rules: {
// Override/add rules settings here, such as:
"regexp/rule-name": "error"
}
}
];
// .eslintrc.js
module.exports = {
"plugins": [
"regexp"
],
"rules": {
// Override/add rules settings here, such as:
"regexp/rule-name": "error"
}
}
The plugin.configs["flat/all"]
/ plugin:regexp/all
config enables all rules. It's meant for testing, not for production use because it changes with every minor and major version of the plugin. Use it at your own risk.
See lib/configs/rules/all.ts for more details.
πΌ Configurations enabled in.
π’ Set in the flat/recommended
configuration.
π΅ Set in the recommended
configuration.
π§ Automatically fixable by the --fix
CLI option.
π‘ Manually fixable by editor suggestions.
NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | π§ | π‘ | |
---|---|---|---|---|---|
no-contradiction-with-assertion | disallow elements that contradict assertions | π’ π΅ | π‘ | ||
no-control-character | disallow control characters | π‘ | |||
no-dupe-disjunctions | disallow duplicate disjunctions | π’ π΅ | π‘ | ||
no-empty-alternative | disallow alternatives without elements | π’ π΅ | π‘ | ||
no-empty-capturing-group | disallow capturing group that captures empty. | π’ π΅ | |||
no-empty-character-class | disallow character classes that match no characters | π’ π΅ | |||
no-empty-group | disallow empty group | π’ π΅ | |||
no-empty-lookarounds-assertion | disallow empty lookahead assertion or empty lookbehind assertion | π’ π΅ | |||
no-escape-backspace | disallow escape backspace ([\b] ) |
π’ π΅ | π‘ | ||
no-invalid-regexp | disallow invalid regular expression strings in RegExp constructors |
π’ π΅ | |||
no-lazy-ends | disallow lazy quantifiers at the end of an expression | π’ π΅ | π‘ | ||
no-misleading-capturing-group | disallow capturing groups that do not behave as one would expect | π’ π΅ | π‘ | ||
no-misleading-unicode-character | disallow multi-code-point characters in character classes and quantifiers | π’ π΅ | π§ | π‘ | |
no-missing-g-flag | disallow missing g flag in patterns used in String#matchAll and String#replaceAll |
π’ π΅ | π§ | ||
no-optional-assertion | disallow optional assertions | π’ π΅ | |||
no-potentially-useless-backreference | disallow backreferences that reference a group that might not be matched | π’ π΅ | |||
no-super-linear-backtracking | disallow exponential and polynomial backtracking | π’ π΅ | π§ | ||
no-super-linear-move | disallow quantifiers that cause quadratic moves | ||||
no-useless-assertions | disallow assertions that are known to always accept (or reject) | π’ π΅ | π‘ | ||
no-useless-backreference | disallow useless backreferences in regular expressions | π’ π΅ | |||
no-useless-dollar-replacements | disallow useless $ replacements in replacement string |
π’ π΅ | |||
strict | disallow not strictly valid regular expressions | π’ π΅ | π§ | π‘ |
NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | π§ | π‘ | |
---|---|---|---|---|---|
confusing-quantifier | disallow confusing quantifiers | π’ π΅ | |||
control-character-escape | enforce consistent escaping of control characters | π’ π΅ | π§ | ||
negation | enforce use of escapes on negation | π’ π΅ | π§ | ||
no-dupe-characters-character-class | disallow duplicate characters in the RegExp character class | π’ π΅ | π§ | ||
no-empty-string-literal | disallow empty string literals in character classes | π’ π΅ | |||
no-extra-lookaround-assertions | disallow unnecessary nested lookaround assertions | π’ π΅ | π§ | ||
no-invisible-character | disallow invisible raw character | π’ π΅ | π§ | ||
no-legacy-features | disallow legacy RegExp features | π’ π΅ | |||
no-non-standard-flag | disallow non-standard flags | π’ π΅ | |||
no-obscure-range | disallow obscure character ranges | π’ π΅ | |||
no-octal | disallow octal escape sequence | π‘ | |||
no-standalone-backslash | disallow standalone backslashes (\ ) |
||||
no-trivially-nested-assertion | disallow trivially nested assertions | π’ π΅ | π§ | ||
no-trivially-nested-quantifier | disallow nested quantifiers that can be rewritten as one quantifier | π’ π΅ | π§ | ||
no-unused-capturing-group | disallow unused capturing group | π’ π΅ | π§ | π‘ | |
no-useless-character-class | disallow character class with one character | π’ π΅ | π§ | ||
no-useless-flag | disallow unnecessary regex flags | π’ π΅ | π§ | ||
no-useless-lazy | disallow unnecessarily non-greedy quantifiers | π’ π΅ | π§ | ||
no-useless-quantifier | disallow quantifiers that can be removed | π’ π΅ | π§ | π‘ | |
no-useless-range | disallow unnecessary character ranges | π’ π΅ | π§ | ||
no-useless-set-operand | disallow unnecessary elements in expression character classes | π’ π΅ | π§ | ||
no-useless-string-literal | disallow string disjunction of single characters in \q{...} |
π’ π΅ | π§ | ||
no-useless-two-nums-quantifier | disallow unnecessary {n,m} quantifier |
π’ π΅ | π§ | ||
no-zero-quantifier | disallow quantifiers with a maximum of zero | π’ π΅ | π‘ | ||
optimal-lookaround-quantifier | disallow the alternatives of lookarounds that end with a non-constant quantifier | π’ π΅ | π‘ | ||
optimal-quantifier-concatenation | require optimal quantifiers for concatenated quantifiers | π’ π΅ | π§ | ||
prefer-escape-replacement-dollar-char | enforces escape of replacement $ character ($$ ). |
||||
prefer-predefined-assertion | prefer predefined assertion over equivalent lookarounds | π’ π΅ | π§ | ||
prefer-quantifier | enforce using quantifier | π§ | |||
prefer-range | enforce using character class range | π’ π΅ | π§ | ||
prefer-regexp-exec | enforce that RegExp#exec is used instead of String#match if no global flag is provided |
||||
prefer-regexp-test | enforce that RegExp#test is used instead of String#match and RegExp#exec |
π§ | |||
prefer-set-operation | prefer character class set operations instead of lookarounds | π’ π΅ | π§ | ||
require-unicode-regexp | enforce the use of the u flag |
π§ | |||
require-unicode-sets-regexp | enforce the use of the v flag |
π§ | |||
simplify-set-operations | require simplify set operations | π’ π΅ | π§ | ||
sort-alternatives | sort alternatives if order doesn't matter | π§ | |||
use-ignore-case | use the i flag if it simplifies the pattern |
π’ π΅ | π§ |
NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | π§ | π‘ | |
---|---|---|---|---|---|
grapheme-string-literal | enforce single grapheme in string literal | ||||
hexadecimal-escape | enforce consistent usage of hexadecimal escape | π§ | |||
letter-case | enforce into your favorite case | π§ | |||
match-any | enforce match any character style | π’ π΅ | π§ | ||
no-useless-escape | disallow unnecessary escape characters in RegExp | π’ π΅ | π§ | ||
no-useless-non-capturing-group | disallow unnecessary non-capturing group | π’ π΅ | π§ | ||
prefer-character-class | enforce using character class | π’ π΅ | π§ | ||
prefer-d | enforce using \d |
π’ π΅ | π§ | ||
prefer-lookaround | prefer lookarounds over capturing group that do not replace | π§ | |||
prefer-named-backreference | enforce using named backreferences | π§ | |||
prefer-named-capture-group | enforce using named capture groups | ||||
prefer-named-replacement | enforce using named replacement | π§ | |||
prefer-plus-quantifier | enforce using + quantifier |
π’ π΅ | π§ | ||
prefer-question-quantifier | enforce using ? quantifier |
π’ π΅ | π§ | ||
prefer-result-array-groups | enforce using result array groups |
π§ | |||
prefer-star-quantifier | enforce using * quantifier |
π’ π΅ | π§ | ||
prefer-unicode-codepoint-escapes | enforce use of unicode codepoint escapes | π’ π΅ | π§ | ||
prefer-w | enforce using \w |
π’ π΅ | π§ | ||
sort-character-class-elements | enforces elements order in character class | π§ | |||
sort-flags | require regex flags to be sorted | π’ π΅ | π§ | ||
unicode-escape | enforce consistent usage of unicode escape or unicode codepoint escape | π§ | |||
unicode-property | enforce consistent naming of unicode properties | π§ |
- β These rules have been removed in a previous major release, after they have been deprecated for a while.
Rule ID | Replaced by | Removed in version |
---|---|---|
no-assertion-capturing-group | regexp/no-empty-capturing-group | v2.0.0 |
no-useless-exactly-quantifier | regexp/no-useless-quantifier, regexp/no-zero-quantifier | v2.0.0 |
no-useless-non-greedy | regexp/no-useless-lazy | v2.0.0 |
order-in-character-class | regexp/sort-character-class-elements | v2.0.0 |
prefer-t | regexp/control-character-escape | v2.0.0 |
See Settings.
eslint-plugin-regexp follows Semantic Versioning and ESLint's Semantic Versioning Policy.
Welcome contributing!
Please use GitHub's Issues/PRs.
See CONTRIBUTING.md.
npm test
runs tests and measures coverage.npm run update
runs in order to update readme and recommended configuration.npm run new [new rule name]
runs to create the files needed for the new rule.npm run docs:watch
starts the website locally.
See the LICENSE file for license rights and limitations (MIT).