Escape string for use in Javascript regex

Possible Duplicate:
Is there a RegExp.escape function in Javascript?

I am trying to build a javascript regex based on user input:

function FindString(input) {
    var reg = new RegExp('' + input + '');
    // [snip] perform search
}

But the regex will not work correctly when the user input contains a ? or * because they are interpreted as regex specials. In fact, if the user puts an unbalanced ( or [ in their string, the regex isn't even valid.

What is the javascript function to correctly escape all special characters for use in regex?


Short 'n Sweet

function escapeRegExp(str) {
  return str.replace(/[-[]/{}()*+?.^$|]/g, "$&");
}

Example

escapeRegExp("All of these should be escaped:  ^ $ * + ? . ( ) | { } [ ]");

>>> "All of these should be escaped:  ^ $ * + ? . ( ) | { } [ ] "

Install

Available on npm as escape-string-regexp

npm install --save escape-string-regexp

Note

See MDN: Javascript Guide: Regular Expressions

Other symbols (~`!@# ...) MAY be escaped without consequence, but are not required to be.

.

.

.

.

Test Case: A typical url

escapeRegExp("/path/to/resource.html?search=query");

>>> "/path/to/resource.html?search=query"

The Long Answer

If you're going to use the function above at least link to this stack overflow post in your code's documentation so that it doesn't look like crazy hard-to-test voodoo.

var escapeRegExp;

(function () {
  // Referring to the table here:
  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp
  // these characters should be escaped
  //  ^ $ * + ? . ( ) | { } [ ]
  // These characters only have special meaning inside of brackets
  // they do not need to be escaped, but they MAY be escaped
  // without any adverse effects (to the best of my knowledge and casual testing)
  // : ! , = 
  // my test "~!@#$%^&*(){}[]`/=?+|-_;:'",<.>".match(/[#]/g)

  var specials = [
        // order matters for these
          "-"
        , "["
        , "]"
        // order doesn't matter for any of these
        , "/"
        , "{"
        , "}"
        , "("
        , ")"
        , "*"
        , "+"
        , "?"
        , "."
        , ""
        , "^"
        , "$"
        , "|"
      ]

      // I choose to escape every character with ''
      // even though only some strictly require it when inside of []
    , regex = RegExp('[' + specials.join('') + ']', 'g')
    ;

  escapeRegExp = function (str) {
    return str.replace(regex, "$&");
  };

  // test escapeRegExp("/path/to/res?search=this.that")
}());
链接地址: http://www.djcxy.com/p/76814.html

上一篇: Javascript正则表达式:如何在正则表达式中放置一个变量?

下一篇: 转义字符串在Javascript正则表达式中使用