Converting user input string to regular expression Converting user input string to regular expression javascript javascript

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