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];
}
});
}