Skip to content

regexp/simplify-set-operations

💼 This rule is enabled in the ✅ plugin:regexp/recommended config.

🔧 This rule is automatically fixable by the --fix CLI option.

require simplify set operations

📖 Rule Details

This rule aims to optimize patterns by simplifying set operations in character classes (with v flag).

This rule does not report simple nested negations. (e.g. /[^[^abc]]/v)
If you want to report simple nested negations, use the regexp/negation rule.

Now loading...

How does this rule work?

This rule attempts to simplify set operations in the ways listed below:

De Morgan's laws

This rule uses De Morgan's laws to look for patterns that can convert multiple negations into a single negation, reports on them, and auto-fix them.
For example, /[[^a]&&[^b]]/v is equivalent to /[^ab]/v, and /[[^a][^b]]/v is equivalent to /[^a&&b]/v.

See https://en.wikipedia.org/wiki/De_Morgan's_laws.

Conversion from the intersection to the subtraction

Intersection sets with complement operands can be converted to difference sets.
The rule looks for character class intersection with negation operands, reports on them, auto-fix them.
For example, /[a&&[^b]]/v is equivalent to /[a--b]/v, /[[^a]&&b]/v is equivalent to /[b--a]/v.

Conversion from the subtraction to the intersection

Difference set with a complement operand on the right side can be converted to intersection sets.
The rule looks for character class subtraction with negation operand on the right side, reports on them, auto-fix them.
For example, /[a--[^b]]/v is equivalent to /[a&&b]/v.

Auto Fixes

This rule's auto-fix does not remove unnecessary brackets. For example, /[[^a]&&[^b]]/v will be automatically fixed to /[^[a][b]]/v.
If you want to remove unnecessary brackets (e.g. auto-fixed to /[^ab]/v), use regexp/no-useless-character-class rule together.

🔧 Options

Nothing.

🚀 Version

This rule was introduced in eslint-plugin-regexp v2.0.0-next.11

🔍 Implementation