Converting user input string to regular expression
Use the RegExp object constructor to create a regular expression from a string:
var re = new RegExp("a|b", "i");// same asvar re = /a|b/i;
var flags = inputstring.replace(/.*\/([gimy]*)$/, '$1');var pattern = inputstring.replace(new RegExp('^/(.*?)/'+flags+'$'), '$1');var regex = new RegExp(pattern, flags);
or
var match = inputstring.match(new RegExp('^/(.*?)/([gimy]*)$'));// sanity check herevar regex = new RegExp(match[1], match[2]);
Here is a one-liner: str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
I got it from the escape-string-regexp NPM module.
Trying it out:
escapeStringRegExp.matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;function escapeStringRegExp(str) { return str.replace(escapeStringRegExp.matchOperatorsRe, '\\$&');}console.log(new RegExp(escapeStringRegExp('example.com')));// => /example\.com/
Using tagged template literals with flags support:
function str2reg(flags = 'u') { return (...args) => new RegExp(escapeStringRegExp(evalTemplate(...args)) , flags)}function evalTemplate(strings, ...values) { let i = 0 return strings.reduce((str, string) => `${str}${string}${ i < values.length ? values[i++] : ''}`, '')}console.log(str2reg()`example.com`)// => /example\.com/u