[ Web Proxy ]
URL:
Viewing: https://javascript.info/regexp-escaping [Back]  [Original]

Escaping, special characters
EN

We want to make this open-source project available for people all around the world.

Help to translate the content of this tutorial to your language!

    Search on Javascript.info:
    Search in the tutorial:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    Escaping, special characters

    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:

    • \n becomes a newline character,
    • \u1234 becomes the Unicode character with such code,
    • And when theres no special meaning: like \d or \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 inside new RegExp).
    • When passing a string to new RegExp, we need to double backslashes \\, cause string quotes consume one of them.
    Tutorial map

    Comments

    read this before commenting
    • If you have suggestions what to improve - please submit a GitHub issue or a pull request instead of commenting.
    • If you can't understand something in the article please elaborate.
    • To insert few words of code, use the <code> tag, for several lines wrap them in <pre> tag, for more than 10 lines use a sandbox (plnkr, jsbin, codepen)

    Web Proxy Viewer  |  New URL  |  Original Page