plain english · token walk · live

Read any regex as plain English

Drop in a pattern and get a token-by-token breakdown — anchors, classes, groups, quantifiers — all explained in order.

Regex Explainer
Tokens
14
steps
Pattern
50 B
chars
Status
valid
ok
Mode
english
verbose
input · pattern
//
output · token-by-token
  1. 1.^start of string/line
  2. 2.(?<user>start named capturing group "user"
  3. 3.[\w.+-]any character in [\w.+-]
  4. 4.+1 or more (greedy) of the previous
  5. 5.)end group
  6. 6.@the literal character '@'
  7. 7.(?<host>start named capturing group "host"
  8. 8.[\w.-]any character in [\w.-]
  9. 9.+1 or more (greedy) of the previous
  10. 10.)end group
  11. 11.\.the literal character '.'
  12. 12.[A-Za-z]any character in [A-Za-z]
  13. 13.{2,}repeat the previous 2, times
  14. 14.$end of string/line
Quick Start

How to read a regex token-by-token

Type any ECMAScript pattern and read what each piece does, in order, in plain English — anchors, character classes, capture groups, lookarounds, and quantifiers all called out by name.

  1. 01

    Paste a pattern

    Drop in any regex — short or sprawling, inherited from a teammate, copied from Stack Overflow, or pulled from a config file. The explainer walks it strictly left-to-right and handles ECMAScript syntax including named capture groups, lookahead, lookbehind, and Unicode property escapes.

    Patterns compile through the JavaScript RegExp constructor, so syntax errors surface immediately and engine quirks like Unicode property escapes (\p{L}) work when the u flag is on.

    patternECMAScriptliterallive
    input · pattern · literalECMAScript · live · regex
    ^[A-Z]\d{3}$
    loaded · ECMAScriptPCRE · ready
  2. 02

    Read each token in English

    Every anchor (^, $, \b), character class ([A-Z], \d, \w), capture group ((?<name>...)), lookaround ((?=...), (?!...)), and quantifier (*, +, ?, {n,m}) becomes a numbered line with its plain-English meaning. The breakdown surfaces both the literal token and its semantic role.

    Each flag character mirrors the ECMAScript literal: g enables iteration, i folds case, m anchors per line, s lets . match newlines, u unlocks proper Unicode, y is sticky, and d emits indices.

    flagsoptionsg · i · mlive
    output · english · optionstokens · ordered · flags
    1. ^ start of string 2. [A-Z] uppercase letter 3. \d{3} exactly 3 digits 4. $ end of string
    flags applied · liveECMA · live
  3. 03

    Sanity-check intent

    Spot stray dots that should be escaped, accidental greedy quantifiers that swallow more than intended, missing anchors that let the regex match mid-string, or duplicated alternation branches. The numbered walk makes drift between intent and implementation obvious in seconds.

    Watch for catastrophic backtracking on nested quantifiers — a common ReDoS source. The tool caps match counts to keep the page responsive on pathological patterns.

    matchgroupshighlightReDoS-safe
    audit · review · outputfix · refine · matches
    no surprises · anchors set · greedy off
    matches · livegroups · live
  4. 04

    Copy or export

    Grab the output as JSON, CSV, or plain text — ready for your editor or pipeline.

    Copy writes via navigator.clipboard.writeText; downloads use a Blob and object URL, so nothing transits the network and the output is byte-identical to what you see on screen.

    copyexportclipboardblob
    export · exportedready · saved
    Copied
    ready to shipsuccess
Pro tips

Regex patterns that don't melt down

Use named groups

(?<year>\d{4}) reads better than $1 and survives reordering. Supported in ECMAScript 2018+.

Anchor strictly

Use ^/$ with the m flag when matching whole lines. Without anchors, partial matches sneak through.

Avoid catastrophic backtracking

Nested quantifiers like (a+)+ can explode. Run patterns through ReDoS Detector first.

Escape every literal

Backslash any meta character you want literally: \.\$\^\*\+\?\(\)\[\]\{\}\|\\.

Test edge cases

Empty string, single character, unicode, the maximum length you expect — write fixtures for each.

Patterns aren&rsquo;t parsers

Don’t parse HTML, JSON, or balanced parens with regex. Use a proper parser when the grammar is recursive.

Use Cases

When explanations help

Turn cryptic patterns into shareable prose.

Onboard new devs

Translate inherited patterns into prose for code reviews. Compiles through the JavaScript RegExp constructor — engine quirks (Unicode property escapes, sticky matching, named groups) work when their flags are on. Error messages cite the exact position of any syntax issue.

ReDoS-safe

Debug match failures

See exactly what each token contributes to a misbehaving regex. Pairs with the ReDoS detector to catch catastrophic backtracking before you deploy. A pattern that handles 1k-character input fine can become a denial-of-service vector on attacker-controlled 1M-character input.

ECMA-compliant

Spot redundancy

Find duplicated alternatives or unused groups quickly. Output exports as JavaScript, Python re, Java util.regex, .NET System.Text.RegularExpressions, PCRE, and POSIX — language quirks are highlighted on conversion so you don't ship a JS-only pattern to a Go service.

spec-grade

Pair-explain

Share an explanation by URL or copy-paste in chat. Capture groups (named or numbered) round-trip cleanly into replacement strings, JSON output, or CSV extraction without re-typing. Backreferences ($1, ${name}) preserve semantics across languages.

cross-engine

Document a pattern

Generate inline comments from the breakdown. Test against edge cases — empty input, single character, max length, multibyte boundaries — to catch off-by-one and zero-length match bugs before they reach production.

test-ready

Learn by example

Walk through a real pattern instead of dry syntax tables. All matching runs client-side so secret patterns never leave the browser. Useful when the pattern itself is sensitive (PII regexes, internal data formats, security filters).

production-ready
FAQ

Frequently asked questions

Yes — (?<name>...) is recognised and the group name is included in the explanation.
Positive and negative lookaheads and lookbehinds are all called out by name.
No. The explainer is a structural walk — even a pattern JavaScript rejects produces a readable breakdown.
Flags are not part of the pattern body and are described separately in the flag reference tool.
No. The tool runs entirely in your browser — your pattern and sample text never leave the page.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!