Cheatsheet for the Regex Cheatsheet, Part VI: Escape Sequences
Tags: beginners, javascript
Published: 2021-05-18 02:27:28

##Intro
I was recently doing a code challenge for a job interview that required me to strip out all nonalphabetic characters. "Ah! I should use Regular Expressions for this!" I thought in triumph, impressed that I even knew what regular expressions _were_. That fleeting moment of glory faded once I decided to brush up on regular expressions and landed on the encouragingly-named [Regular Expressions Cheatsheet](https://cheatography.com/davechild/cheat-sheets/regular-expressions/). I had no idea how to use it!

So, for people like me, here is a *Cheatsheet for the Regular Expressions Cheatsheet, Part VI: Escape Sequences*

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mj51hrnsa0832b0yl0hh.png)

## What's an Escape Sequence?
Regular Expressions are typically used to search for characters or sequences of characters. This process is straightforward for a regular character such as a number or letter, but what if you're searching for a character that has special meaning in code, such as an ``*``? To tell the interpreter that you mean the literal character ``*`` instead of the wildcard property of ``*``, you "escape" the character by placing a ``\`` in front of it.

## Anatomy of a regular expression
1. Forward slashes go on either end like so: ``/``something``/``
2. Add ``g`` for "global" at the end to find every instance, like so: ``/``something``/g``
3. Add ``m`` to "multi line" to the beginning/end of each line, not just the beginning/end of each string, like ``/``something``/g`` or ``/``something``/gm``

## Escape Sequences

I'm going to illustrate the next few concepts with [Mozilla's exceptionally clever wordmark](https://mozilla.design/mozilla/), which is `moz:\\a`
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f4v9uhti6mfsog3kfaql.png)

##### ``\`` Escape following character
* ``\`` is used in ``\/\//`` to find the following:  
*Mozilla's wordmark is moz:<mark>//</mark>a*
* Example on [regex101.com](https://regex101.com/r/ni5DWc/1)
* Example in Javascript:
```javascript
let sentence = "Mozilla's wordmark is moz://a";
let regex = \/\//;
let found = sentence.match(regex);
console.log(found); // [
  '//',
  index: 26,
  input: "Mozilla's wordmark is moz://a",
  groups: undefined
]
```

## Ok, but what if Mozilla changed their wordmark from ``moz://a`` to ``moz:\\a``?

Let's try it that way...
* ``\`` is used in ``/\\/`` to find the following:  
*"What if Mozilla changed their wordmark from moz://a to moz:<mark>\\\\</mark>a?"*
* Example on regex101.com:  
 * For some strange reason, on regex101 ``/\\/`` will only find the first ``\``, [see example](https://regex101.com/r/xkN7Du/1).
 * To find both `\\`, the regex needs to be ``/\\\\/``, [see example](https://regex101.com/r/ZsTMgd/1)
* Example in Javascript:  

(Note: To make this work, the string needs to spell the wordmark as ``moz:\\\\a``)
```javascript
let sentence = "What if Mozilla changed their wordmark from moz://a to moz:\\\\a?";
let regex = /\\/;
let found = sentence.match(regex);
console.log(sentence); // What if Mozilla changed their wordmark from moz://a to moz:\\a?
console.log(found); // [
  '\\',
  index: 59,
  input: 'What if Mozilla changed their wordmark from moz://a to moz:\\\\a?',
  groups: undefined
]
```
---

Well, I think we now know why Mozilla went with ``moz://a`` instead of ``moz:\\a!``"

---
## Regex Escape Sequences that are not supported in Javascript

##### ``\Q`` Begin literal sequence
##### ``\E`` End literal sequence