How to properly escape characters in regexp

\Q...\E doesn’t work in JavaScript (at least, they don’t escape anything…) as you can see:

var s = "*";
print(s.search(/\Q*\E/));
print(s.search(/\*/));

produces:

-1
0

as you can see on Ideone.

The following chars need to be escaped:

  • (
  • )
  • [
  • {
  • *
  • +
  • .
  • $
  • ^
  • \
  • |
  • ?

So, something like this would do:

function quote(regex) {
  return regex.replace(/([()[{*+.$^\\|?])/g, '\\$1');
}

No, ] and } don’t need to be escaped: they have no special meaning, only their opening counter parts.

Note that when using a literal regex, /.../, you also need to escape the / char. However, / is not a regex meta character: when using it in a RegExp object, it doesn’t need an escape.

Leave a Comment