The Regular Expression (RegEx) Cheat Sheet you always wanted
Tags: regex, javascript, programming, webdev
Published: 2022-08-14 04:03:12

I get it even though **Regex** is incredibly useful, it is extremely hard to master! This is a cheat sheet that provides the most common **RegEx** use cases that will help you whenever need a sneak peek at the **Regex** syntax!

## Characters

| Characters     | Legend                                                                           | Example   | Sample Match           |
| -------------- | -------------------------------------------------------------------------------- | --------- | ---------------------- |
| [abc], [a-c]   | Match the given characters/range of characters                                   | abc[abc]  | abca, abcb, abcc       |
| [^abc], [^a-c] | Negate and match the given characters/range of characters                        | abc[^abc] | abcd, abce, abc1, ...  |
| .              | Any character except **line break**                                              | bc.       | bca, bcd, bc1, b., ... |
| \d             | Any **numeric character** (equivalent to [0-9])                                  | c\d       | c1, c2, c3 ...         |
| \D             | Any **non-numeric character** (equivalent to [^0-9])                             | c\D       | ca, c., c\* ...        |
| \w             | Any **alphanumeric character** (equivalent to [A-Za-z0-9_])                      | a\w       | aa, a1, a\_ ...        |
| \W             | Any **non-alphanumeric character** (equivalent to [A-Za-z0-9_])                  | a\W       | a), a$, a? ...         |
| \s             | Usually used for **white space**, but can be used for **new line**, **tab**, etc | a\s       | a                      |
| \S             | Not a **white space** or equivalent like **new line**, **tab**, etc              | a\S       | aa                     |
| \t             | Matches a **horizontal tab**                                                     | T\tab     | T ab                   |
| \r             | Matches a **carriage return**                                                    | AB\r\nCD  | AB<br>CD               |
| \n             | Matches a **linefeed**                                                           | AB\r\nCD  | AB<br>CD               |
| \              | Escapes special characters                                                       | \d        | 0, 1, ...              |
| x&#124;y       | Matches either "x" or "y"                                                        | a&#124;b  | a, b                   |

## Assertions

| Characters | Legend                                                                            | Example    | Sample Match                |
| ---------- | --------------------------------------------------------------------------------- | ---------- | --------------------------- |
| ^          | Start of string or start of line depending on **multiline mode**                  | ^abc.\*    | abc, abd, abcd, ...         |
| $          | End of string or start of line depending on **multiline mode**                    | .\*xyz$    | xyz, wxyz, abcdxyz, ...     |
| \b         | Matches a word character is not followed by another **word-character**            | My.\*\bpie | My apple pie, ...           |
| \B         | Matches a **non-word boundary**                                                   | c.\*\Bcat  | copycat, ...                |
| x(?=y)     | **Lookahead assertion**: Matches "x" only if "x" is followed by "y"               | \d+(?=€)   | $1 = 0.**9**8€, ...         |
| x(?!y)     | **Negative Lookahead assertion**: Matches "x" only if "x" is followed not by "y"  | \d+\b(?!€) | $**1** = **0**.98€ , ...    |
| (?<=y)x    | **Lookbehind assertion**: Matches "x" only if "x" is preceded by "y"              | (?<=\d)\d  | $1 = 0.9**8**€, ...         |
| (?<!y)x    | **Negative Lookbehind assertion**: Matches "x" only if "x" is not preceded by "y" | (?<!\d)\d  | $**1** = **0**.**9**8€, ... |

## Groups

| Characters    | Legend                                                                 | Example                | Sample Match         |
| ------------- | ---------------------------------------------------------------------- | ---------------------- | -------------------- |
| (x)           | **Capturing group**: Matches x and remembers the match                 | A(nt&#124;pple)        | Ant (remembers "nt") |
| (?&lt;name>x) | **Capturing group**: Matches x and stores it in the mentioned variable | A(?&lt;m>nt&#124;pple) | Ant (m = "nt")       |
| (?:name>x)    | **Non-capturing group**: Matches x and does not remember the match     | A(?:nt&#124;pple)      | Ant                  |
| \\_n_         | Back reference to the last substring matching the _n_ parenthetical    | (\d)\+(\d)=\2\+\1      | 5+6=6+5              |

## Quantifiers

| Characters | Legend                                                                             | Example  | Sample Match             |
| ---------- | ---------------------------------------------------------------------------------- | -------- | ------------------------ |
| x\*        | Matches the preceding item "x" 0 or more times                                     | a\*      | a, aa, aaa, ...          |
| x+         | Matches the preceding item "x" 1 or more times, equivalent to {1,}                 | a+       | aa, aaa, aaaa, ...       |
| x?         | Matches the preceding item "x" 0 or 1 time                                         | ab?      | a, ab                    |
| x{_n_}     | Matches the preceding item "x" _n_ times (_n_ = **positive integer**)              | ab{5}c   | abbbbbc                  |
| x{_n_,}    | Matches the preceding item "x" at least _n_ times (_n_ = **positive integer**)     | ab{2,}c  | abbc, abbbc, abbbbc, ... |
| x{_n_,_m_} | Matches the preceding item "x" at least _n_ times & at most _m_ times (_n_&lt;_m_) | ab{2,3}c | abbc, abbbc              |

### NOTE

By default **quantifiers** are **greedy** (they try to match as much of the string as possible). The `?` character after the **quantifier** makes the **quantifier** **non-greedy** (it will stop as soon as it finds a match).

For Example: `\d+?` for a test string `12345` will match only `1`, but `\d+` will match the entire string `12345`

## Flags

**Flags** are put at the end of the **regular expression**. They are used to modify how the **regular expression** behaves.

For Example: `/a/` for a test string `a` will match `a` only, but adding the flag `i` (`/a/i`) would match both `a` and `A`

| Characters | Legend                                                                                         |
| ---------- | ---------------------------------------------------------------------------------------------- |
| d          | Generate indices for substring matches                                                         |
| g          | **Global search**                                                                              |
| i          | **Case-insensitive search**                                                                    |
| m          | **Multi-line search**                                                                          |
| s          | Allows `.` to match **newline characters**                                                     |
| u          | Treats a pattern as a sequence of **Unicode code points**                                      |
| y          | Perform a **sticky** search that matches starting at the current position in the target string |

**That's all folks!**

Finding **personal finance** too intimidating? Checkout my **Instagram** to become a [**Dollar Ninja**](https://www.instagram.com/the.dollar.ninja/)

# Thanks for reading

Need a **Top Rated Front-End Development Freelancer** to chop away your development woes? Contact me on [Upwork](https://www.upwork.com/o/profiles/users/~01c12e516ee1d35044/)

Want to see what I am working on? Check out my [Personal Website](https://tapajyoti-bose.vercel.app) and [GitHub](https://github.com/ruppysuppy)

Want to connect? Reach out to me on [LinkedIn](https://www.linkedin.com/in/tapajyoti-bose/)

I have moved to Bali, Indonesia as a Digital Nomad. Follow me on [Instagram](https://www.instagram.com/tapajyotib/) to check out what I am up to.

Follow my blogs for **Weekly new Tidbits** on [Dev](https://dev.to/ruppysuppy)

**FAQ**

These are a few commonly asked questions I get. So, I hope this **FAQ** section solves your issues.

1. **I am a beginner, how should I learn Front-End Web Dev?**
   Look into the following articles:

    1. [Front End Development Roadmap](https://dev.to/ruppysuppy/front-end-developer-roadmap-zero-to-hero-4pkf)
    2. [Front End Project Ideas](https://dev.to/ruppysuppy/5-projects-to-master-front-end-development-57p)

2. **Would you mentor me?**
   Sorry, I am already under a lot of workload and would not have the time to mentor anyone.