JavaScriptRegex

How to modify RegExp flags

Changing regex flags without writing duplicate regular expressions

Modifying RegExp flags

Given the need for two identical regular expressions with different flags, instead of creating two variables:

const a = /hello\sworld\!/gi;
const b = /hello\sworld\!/g;

You could use the RegExp constructor to create a copy of the first regular expression and add new flags to it:

const x = /ab(c)/gi;
const y = new RegExp(x, "g");
console.log(y);

Which would produce the following output:

/ab(c)/g

Detecting RegExp flags

To get a string containing the flags in use on a particular regular expression, you'd use the RegExp.prototype.flags property:

const regex = /hello\sworld\!/gi
console.log(regex.flags);

// output: gi

Which you could then split into an array:

const regex = /hello\sworld\!/gi
console.log(regex.flags.split(""));

// output: ["g", "i"]

And search:

const regex = /hello\sworld\!/gi
const flags = regex.flags.split("");
console.log(flags.includes("g"));

// output: true

Polyfill

You may need to polyfill RegExp.prototype.flags as it's not supported by Internet Explorer at all.

if (RegExp.prototype.flags === undefined) {
  Object.defineProperty(RegExp.prototype, "flags", {
    configurable: true,
    get: function() {
      return this.toString().match(/[gimuy]*$/)[0];
    }
  });
}