Skip to content

JonasBa/eslint-plugin-no-lookahead-lookbehind-regexp

Repository files navigation

eslint-plugin-no-lookahead-lookbehind-regexp

Lint the use of lookahead and lookbehind regexp expression. The expression is problematic, as compiling it in an unsupported browser will throw an error and possibly crash your browser. The plugin handles both Regexp literal and constructor notations.

1. Install

npm install --save-dev eslint-plugin-no-lookahead-lookbehind-regexp

2. Add plugin to your ESlint configuration

.eslintrc.json

   {
+    "extends": ["plugin:no-lookahead-lookbehind-regexp/recommended"],
+    "env": {
+      "browser": true
+    },
   }

3. Configure Browser Targets

We use browserslist to resolve browser support - if no browserslist config is found, then the use of lookahead and lookbehind regexp group will always throw an error!

package.json

   {
+    "browserslist": [
+      "defaults"
+    ]
  }

4. Customizing rules

By default, the plugin will report on all lookahead and lookbehind regexp as well as their negative counterparts(if they are not supported with above browserslist target settings). To enable only individual rules like erroring only on lookbehind expressions, you can pass a list of rules that you wish to enable as options in your eslint. Note that once a single rule is passed as a configuration option, all of the other rules are disabled by default and you are in full control.

rules: {
   'no-lookahead-lookbehind-regexp/no-lookahead-lookbehind-regexp': [
      'error',
      'no-lookahead',
      'no-lookbehind',
      'no-negative-lookahead',
      'no-negative-lookbehind',
   ],
}

5. Disable Browserslist Support

By default, the plugin will use yours project's browserslist settings to find availability of lookahead/lookbehind and their negative counterparts. However, if you want to disable this feature to report all usages(still controlled by above rules settings) as errors, you can pass an additional object options.

rules: {
   'no-lookahead-lookbehind-regexp/no-lookahead-lookbehind-regexp': [
      'error',
      'no-lookahead',
      { browserslist: false },
   ],
}

Contributing

Be respectful, contributions of all sorts are well appreciated. If you have an issue with the package, file a descriptive issue with a reproducible case (if possible ofc). In case you want to improve the package or have ideas, file an issue before submitting a PR to avoid frustration in case we do not want to adopt the changes. Keep it positive ✌️