Converting user input string to regular expression

前端 未结 11 1972
无人及你
无人及你 2020-11-22 14:18

I am designing a regular expression tester in HTML and JavaScript. The user will enter a regex, a string, and choose the function they want to test with (e.g. search, match,

11条回答
  •  爱一瞬间的悲伤
    2020-11-22 14:20

    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
    

提交回复
热议问题