← All Tools
Natural Regex Parser🔒 100% local
Plain English to regex. Privacy-first, no server uploads, no tracking.
Related Tools
Takes a regular expression and prints a line-by-line plain-English reading of it: each atom in order, what a group type does, how a quantifier applies, what the flags change, and warnings about greedy ".*" or nested quantifiers. It takes the pattern with or without the surrounding slashes and trailing flags - "\d{3}-\d{4}" and "/^[a-z]+$/i" both work.
How to use it
- Paste a pattern into the Input box.
- Press Process to get the numbered breakdown, the Overall summary and the flag explanation.
- Include the slashes and flags if you have them; without them the whole string is treated as the bare pattern.
Worked example
/^[a-z]+$/ibecomesReading: ^[a-z]+$ (flags: i)
Length: 8 chars, 0 group(s), flags: i
In plain English, left to right:
1. START of the string (or line with the m flag)
2. any ONE of a - z — one or more times
3. END of the string (or line with the m flag)
Overall: START of the string (or line with the m flag), any ONE of a - z — one or more times, END of the string (or line with the m flag)
Flags mean: i = case-insensitive\d{3}-\d{4}becomesReading: \d{3}-\d{4}
Length: 11 chars, 0 group(s), no flags
In plain English, left to right:
1. any digit (0-9) — exactly 3 times
2. the literal character "-"
3. any digit (0-9) — exactly 4 times
Overall: any digit (0-9) — exactly 3 times, the literal character "-", any digit (0-9) — exactly 4 times
No flags: first match only, case-sensitive, ^/$ anchor the whole string.When to use it
- Decoding a pattern someone else wrote before you edit it.
- Explaining what a validation rule accepts to a reviewer who does not read regex fluently.
- Checking your own pattern for a greedy ".*" before it reaches production.
What it does not do
- The name and the "Plain English to regex" description in the tool list promise the opposite direction. The tool only reads an existing pattern; typing "email pattern" produces a literal reading of those two words, not a pattern that matches emails.
- Lookbehind is mislabelled. "(?<=foo)bar" is reported as "named group \"=fo\" containing \"?<=foo\"" because the "?<" branch is tested before the "?<=" and "?<!" branches, so lookbehind and negative lookbehind never reach their own descriptions.
- Inside a bracket class every backslash is stripped before the characters are listed, so "[\d-]" reads as "any ONE of d -" with the digit escape gone.
- It does not validate the pattern. Unbalanced brackets or parens are read character by character and produce a confident but wrong breakdown.