About RegexCalc
What this is
RegexCalc runs a regular expression against your text using the JavaScript engine already sitting in your browser. Type a pattern between the slashes, tick the flags you want, paste a test string: the page recompiles and re-evaluates on every keystroke and reports each match's index, matched text, and capture groups. Nothing is uploaded or logged, because there is no server endpoint for either the pattern or the text to travel to.
That shape is the reason the site exists in this form. What people paste into a regex tester is frequently what they are not allowed to send somewhere — log lines with customer IDs, a payload from staging, a config file with a hostname that should stay private. A tester with a backend would read all of that to do a job a browser does locally. This one cannot even try.
Five recipes load as buttons — email, URL, IPv4, semver, UUID — each with its own sample string. The regex replace tool covers substitution; the guide library covers what does not fit in a tooltip.
What this is not
- Not multi-engine. No PCRE2, RE2, Python, or .NET mode. Every result here is JavaScript's, so the engine matrix in the cheatsheet is required reading before you assume a pattern is portable. Alternatives covers where the other engines earn their keep.
- Not a substituter. The main tool extracts. Replacement preview with
$1-style backreferences lives in the replace tool. - Not an explainer. It reports indices and group values, not why a pattern matched.
- Flag-limited. The toggles are
g,i,m,s. Nouorvswitch, sov-only syntax such as set difference cannot be shown in this UI even though the engine supports it. - Group output is positional. Groups print as
$1,$2. Named groups still compile and match; the panel does not print the names. - Copy behaves differently from display. The copy button always runs with
g, so it copies every match even when the panel — honouring the flags you ticked — showed one.
What this runtime accepts, measured
Each construct was compiled at runtime with new RegExp: "accepted" means it ran, "rejected" means it threw. Measured 2026-10-11 on Node v24.21.0 with V8 13.6.233.17-node.53 — the same class of engine your browser runs.
| Construct | This runtime |
|---|---|
Lookbehind (?<=a) | accepted |
Named groups (?<y>\d{4}) | accepted |
\p{Script=Greek} with u | accepted |
\p{L} with v | accepted |
Set difference [\p{L}--q] with v | accepted |
Duplicate group names with v | accepted |
Named backreference \k<a> | accepted |
dotAll via s | accepted |
Atomic group (?>a*) | throws |
Possessive quantifier a*+ | throws |
The two throwers are the ones worth memorising: they are the constructs repeatedly recommended for ReDoS defence, and JavaScript does not have them. When a pattern you found elsewhere will not compile here, that is usually the reason. The lookaround guide covers the rest of the divergence — JS allows variable-length lookbehind and refuses atomic groups, the opposite of PCRE2. Nothing on the TC39 proposals list changes how you write a pattern today, and the MDN reference reads like a closed book, not a roadmap.
Compiling for real has one useful side effect: a broken pattern shows you the engine's own message instead of a generic "invalid regex".
Who runs it
One person, in the United States. regexcalc.net sits alongside curlparse.net, jsonbeautify.net, and sqlformat.net — single-purpose utilities that each do one job in the browser. The person who reads your bug report is the person who edits the page. Where a claim is about the wider market rather than this page, it says so — the trends page is the clearest example.
Why it's free
A small, non-blocking ad slot pays for the domain and hosting. Client-side tools are cheap to run: no backend to scale, no database to migrate at two in the morning, no usage spike to pay for. The changelog is dated from real commits, the privacy policy is specific about what little is collected, and contact reaches a human — reports of valid patterns being rejected are the most actionable mail this site gets.