Skip to content

Latest commit

 

History

History
126 lines (88 loc) · 3.13 KB

no-useless-non-capturing-group.md

File metadata and controls

126 lines (88 loc) · 3.13 KB
pageClass sidebarDepth title description since
rule-details
0
regexp/no-useless-non-capturing-group
disallow unnecessary non-capturing group
v0.4.0

regexp/no-useless-non-capturing-group

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

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

disallow unnecessary non-capturing group

📖 Rule Details

This rule reports unnecessary non-capturing group

/* eslint regexp/no-useless-non-capturing-group: "error" */

/* ✓ GOOD */
var foo = /(?:abcd)?/.test(str)
var foo = /a(?:ab|cd)/.test(str)

/* ✗ BAD */
var foo = /(?:ab|cd)/.test(str)
var foo = /(?:abcd)/.test(str)
var foo = /(?:[a-d])/.test(str)
var foo = /(?:[a-d])|e/.test(str)
var foo = /(?:a|(?:b|c)|d)/.test(str)

🔧 Options

{
  "regexp/no-useless-non-capturing-group": ["error", {
    "allowTop": "partial" // or "always" or "never"
  }]
}
  • "allowTop": Whether a top-level non-capturing group is allowed. Defaults to "partial".

    Sometimes it's useful to wrap a whole pattern into a non-capturing group (e.g. when the pattern is used as a building block to construct more complex patterns). Use this option to allow top-level non-capturing groups.

    • "partial": Allows top-level non-capturing groups of patterns used as strings via .source.

      /* eslint regexp/no-useless-non-capturing-group: ["error", { allowTop: "partial" }] */
      
      /* ✓ GOOD */
      var foo = /(?:ab|cd)/;
      var bar = /(?:ab|cd)/; // We still don't know how it will be used.
      
      /* ✗ BAD */
      /(?:ab|cd)/.test(str);
      
      /*-------*/
      var baz = new RexExp(foo.source + 'e');
      baz.test(str);
    • "always": Always allow top-level non-capturing groups.

      /* eslint regexp/no-useless-non-capturing-group: ["error", { allowTop: "always" }] */
      
      /* ✓ GOOD */
      var foo = /(?:abcd)/.test(str)
      var foo = /(?:ab|cd)/.test(str)
      var foo = /(?:abcd)/.test(str)
      var foo = /(?:[a-d])/.test(str)
      
      /* ✗ BAD */
      var foo = /(?:[a-d])|e/.test(str)
      var foo = /(?:a|(?:b|c)|d)/.test(str)
    • "never": Never allow top-level non-capturing groups.

      /* eslint regexp/no-useless-non-capturing-group: ["error", { allowTop: "never" }] */
      
      /* ✗ BAD */
      var foo = /(?:ab|cd)/;
      var bar = /(?:ab|cd)/;
      
      /(?:ab|cd)/.test(str);
      
      /*-------*/
      var baz = new RexExp(foo.source + 'e');
      baz.test(str);

🚀 Version

This rule was introduced in eslint-plugin-regexp v0.4.0

🔍 Implementation