As weve seen, a backslash \ is used to denote character classes, e.g. \d. So its a special character in regexps (just like in regular strings).
There are other special characters as well, that have special meaning in a regexp, such as [ ] { } ( ) \ ^ $ . | ? * +. They are used to do more powerful searches.
Dont try to remember the list soon well deal with each of them, and youll know them by heart automatically.
Escaping
Lets say we want to find literally a dot. Not any character, but just a dot.
To use a special character as a regular one, prepend it with a backslash: \..
Thats also called escaping a character.
For example:
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!)
alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)
Parentheses are also special characters, so if we want them, we should use \(. The example below looks for a string "g()":
alert( "function g()".match(/g\(\)/) ); // "g()"
If were looking for a backslash \, its a special character in both regular strings and regexps, so we should double it.
alert( "1\\2".match(/\\/) ); // '\'
A slash
A slash symbol '/' is not a special character, but in JavaScript it is used to open and close the regexp: /...pattern.../, so we should escape it too.
Heres what a search for a slash '/' looks like:
alert( "/".match(/\//) ); // '/'
On the other hand, if were not using /.../, but create a regexp using new RegExp, then we dont need to escape it:
alert( "/".match(new RegExp("/")) ); // finds /
new RegExp
If we are creating a regular expression with new RegExp, then we dont have to escape /, but need to do some other escaping.
For instance, consider this:
let regexp = new RegExp("\d\.\d");
alert( "Chapter 5.1".match(regexp) ); // null
The similar search in one of previous examples worked with /\d\.\d/, but new RegExp("\d\.\d") doesnt work, why?
The reason is that backslashes are consumed by a string. As we may recall, regular strings have their own special characters, such as \n, and a backslash is used for escaping.
Heres how \d.\d is perceived:
alert("\d\.\d"); // d.d
String quotes consume backslashes and interpret them on their own, for instance:
\nbecomes a newline character,\u1234becomes the Unicode character with such code,- And when theres no special meaning: like
\dor\z, then the backslash is simply removed.
So new RegExp gets a string without backslashes. Thats why the search doesnt work!
To fix it, we need to double backslashes, because string quotes turn \\ into \:
let regStr = "\\d\\.\\d";
alert(regStr); // \d\.\d (correct now)
let regexp = new RegExp(regStr);
alert( "Chapter 5.1".match(regexp) ); // 5.1
Summary
- To search for special characters
[ \ ^ $ . | ? * + ( )literally, we need to prepend them with a backslash\(escape them). - We also need to escape
/if were inside/.../(but not insidenew RegExp). - When passing a string to
new RegExp, we need to double backslashes\\, cause string quotes consume one of them.
Comments
<code>tag, for several lines wrap them in<pre>tag, for more than 10 lines use a sandbox (plnkr, jsbin, codepen)