Regex Explainer

Runs in browser Utilities

Paste a regex to see it broken into groups, quantifiers, classes, anchors, lookarounds and backreferences, each explained in human language.

Privacy: This tool runs entirely in your browser. Your input never leaves your device.
Loading tool…

What is a regular expression?

A regular expression (regex) is a pattern that describes a set of strings: character classes ([0-9]), quantifiers (+, *, {2,4}), anchors (^, $) and groups combine into rules that a matcher applies to text. Regexes validate formats, extract fields and drive search-and-replace; the JavaScript flavour is defined by ECMA-262, and small differences between engines are why a pattern should be tested with the engine that will run it.

Read the guide: Regular Expressions (Regex) for Beginners

How to use Regex Explainer

  1. Paste the regular expression (a literal such as /…/gi also works).
  2. Enter the flags you use so anchors and the dot are described correctly.
  3. Read the summary and the table; expand the parse tree for the full structure.

Regex Explainer features

  • Token-by-token table with type and a plain-English sentence for each element
  • Nested view of groups, classes and quantified elements
  • Understands named groups, lookahead/lookbehind, lazy quantifiers, back-references and Unicode properties
  • Flag-aware wording for ^, $ and the dot
  • JSON parse tree for documentation or tooling
  • Precise error position when the pattern is invalid

Regex Explainer example

Explain an ISO date pattern

Input:

^(?<year>\d{4})-(?<month>0[1-9]|1[0-2])$

Output:

^ → Asserts position at the start of the string.
(?<year>\d{4}) → Named capturing group "year" (#1)…
  \d{4} → Matches a digit (0–9), exactly 4 times (greedy).
- → Matches a hyphen "-" literally.
(?<month>0[1-9]|1[0-2]) → Named capturing group "month" (#2)…
$ → Asserts position at the end of the string.

Frequently asked questions about Regex Explainer

What does the explainer understand?

Literals, escapes (\d \w \s \b, \xhh, \uhhhh, \p{…}), character classes and ranges, all group types (capturing, named, non-capturing, lookahead, lookbehind), greedy and lazy quantifiers, alternation, anchors and numbered or named back-references.

Why does the explanation mention multiline or dotAll?

Flags change the meaning of ^, $ and the dot. Enter the flags you use so the wording matches the actual behaviour.

Can it explain PCRE or Python-specific syntax?

Most syntax is shared, but engine-specific constructs such as possessive quantifiers (a++), atomic groups (?>…) or inline flags (?i) are not part of JavaScript and are reported as errors.

How are groups numbered?

By the position of their opening parenthesis from left to right. Non-capturing groups and lookarounds do not get a number.

Technical notes

A hand-written recursive-descent parser builds an AST (alternation → sequence → quantified atoms) mirroring ECMAScript grammar. Each node carries its raw source, offsets and a description; the same parser powers the catastrophic-backtracking guard in the Regex Tester.

References