A regex should read like a sentence.
— not look like your fr.*ak/i\n/g password.
RegexPilot is a Mac-native visual regex builder with AI. Drag blocks. Ask in English. Test against real engines.

Try it right here.
The actual app, running in your browser. Drag blocks from the palette, or paste a regex into the field at the top. Click the frame to expand full-screen.
![Hand-drawn date-regex sketch on a sticky note: three boxed sub-patterns labelled YEAR (4 digits), MONTH (0[1-9] or 1[0-2]), and DAY (0[1-9] or [12] digit or 3[01]) joined by dashes.](/sketch-date-pattern.jpg)
The drawing, made live.
I found myself drawing the regex every time — on paper, on whiteboards, in the corner of a notebook. ^, a bubble for "any word character", an arrow into a group, with the English sentence scribbled underneath so I wouldn't lose what I meant.
RegexPilot is that drawing, made live. The bubbles you draw become the pattern, the arrows become the rail, and the natural-language caption you mumble to yourself sits right there in the Breakdown panel.
Stop decoding regex in your head.
Drag blocks from a categorised palette, connect them on a railroad track, and see a plain-English breakdown of the whole pattern while you work.
- Drag-and-drop builder with palette categories for characters, anchors, groups, lookarounds.
- Inspector panel for precise edits on any node without touching the source string.
- Breakdown tree that explains every part in plain English, bidirectionally linked to the rail.
- Undo / redo, copy / paste, drag-to-reorder — every affordance you already know.
\bWord boundary.Position at the edge of a word.\wWord.Letters, digits, underscore.*Quantifier.Zero or more.@Character.Matches “@”.[Character set.One of:a-zRange.“a” to “z”.+Quantifier.One or more.]\.Escaped character.Matches “.”.[Character set.One of:a-zRange.“a” to “z”.{2,}Quantifier.Two or more.]\bWord boundary.Position at the edge of a word.AI drafts. You direct.
Describe a pattern in plain English and get a working draft in seconds. The visual editor is how you catch what the AI got almost right — before it ships to production.
- Generate from a prompt — "match UK postcodes, optional space" → a draft, not a StackOverflow rabbit hole.
- Explain any pattern — paste legacy regex, get a plain-English breakdown grouped by intent.
- Spot the assumptions — every pill shows what it matches. If the AI assumed 4 digits when you meant 1–4, you see it immediately.
- Authentic engines for Java, Ruby, C#, PHP — so "worked in ChatGPT" actually means "works in production".
- Bring your own key for OpenAI, Claude, Gemini, DeepSeek, Qwen, Mistral, Groq, OpenRouter, xAI (Grok) — or any OpenAI-compatible endpoint.
- Or run fully offline — any OpenAI-compatible local runtime works: LM Studio, Ollama, llama.cpp, or LocalAI. Point RegexPilot at the localhost port and go.
^[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][A-Z]{2}$M11AA). One drag: make the space optional with \s? — fixed.21 regex flavors. Authentic engines where they matter.
Every flavor routes to the real engine its production code uses — not a JavaScript polyfill pretending to be Python. Switch flavors from the toolbar; the same pattern tells you exactly what each engine does with it. Python even toggles between the stdlib re and the third-party regex module — unlocking fuzzy matching ({e<=1}), set operations ([\w--\d]), and recursive patterns ((?R)). Why it matters: 264 of 534 tested constructs behave differently across engines — and only 83 say so.
JavaScript / TypeScript
Python
Java
Scala · Kotlin · Groovy · Clojure
C# / .NET
Ruby
PHP
Go / RE2
Rust
Perl
Swift
Shell — BSD grep / sed / awk (POSIX BRE/ERE)
Elixir
R
Dart
MySQL 8
PostgreSQL
- freeJavaScript & TypeScript on the system
JavaScriptCore— the engine Safari runs. No license, no install. - bundledSidecar binary inside the .app, or the in-process engine is bit-identical to the language's own (PostgreSQL → Spencer ARE from postgres source; MySQL → PCRE2+UCP for ICU equivalence; Elixir → libpcre2; R → TRE and PCRE2, both in-process; Dart → JavaScriptCore, the same engine its own Irregexp port implements).
Test and trust.
Three ways RegexPilot catches the thing you would have shipped broken.
Live match testing
Paste sample text, see every match and capture group highlighted as you build. Multi-cursor selection maps one-to-one back to the AST.
Visual replace builder
Compose the replacement as draggable pill blocks ($1, literal text, case transforms). No guessing at back-reference syntax per flavor.
Authentic engines
Your Java regex tested against real java.util.regex, Ruby against Onigmo, the engine Ruby itself embeds, C# against the .NET runtime. No polyfill surprises.
From idea to regex in three steps.
Drag or describe
Pick blocks from the palette and connect them, or type what you want in plain English and let AI generate a starting pattern.
Test and refine
Paste sample text, flip the flavor selector, watch every match light up. Tweak individual nodes in the inspector panel.
Export and integrate
Copy the regex, export a code snippet in your target language, send a railroad SVG to your team docs, or open it straight from VS Code.
A starter library, yours to extend.
50 hand-picked patterns out of the box — email, URL, IPv4/v6, ISO-8601 dates, credit cards, password rules, log parsing, stack trace lines, plus flavor-specific examples for Dart, MySQL, PostgreSQL, shell tools, Python, Java, Ruby, C#, PHP, Perl and Rust — and your own library grows alongside them.
Light, dark, and every shade between.
Auto-follow macOS, pick a curated community theme, or import your own as JSON. Semantic pill colors stay intact — the theme recolors the app chrome, not the regex-kind palette.
@, one or more letters, a dot, at least two more letters, end of line.Drag to compare.
Integrations that don't make you switch apps.
VS Code extension
Select a regex and send it to the app from the editor — right-click Open in RegexPilot, or the CodeLens above the literal. Pick Edit in RegexPilot instead and the two stay in step: rebuild the pattern on the canvas and the edit lands back in your file.
Copy share link
One click turns the canvas into a URL — the pattern, its flags, the flavor, and your test text with it. The recipient opens it in any browser: no install, no account, nothing to sign up for.
Post it on X, Mastodon, Slack or Discord and it unfurls into a card with the pattern itself, syntax-highlighted.
regexpilot.com/s?fl=javascript&c=AQp3HixzXf-20_Vx_SAPukzolsqGzp8v…
PNG / SVG export
One-click export the railroad diagram for documentation. Vector SVG for crisp docs, raster PNG for pull-request comments.
date-railroad.svg4 KB vectordate-railroad.pngraster, 4x
Roadmap.
What's shipped and what's queued. No secrets, no "coming soon" never-arrives.
Shipped in v1.3
- Regex+ on JavaScript / TypeScript — Steven Levithan's superset of JavaScript regex, giving you atomic groups
(?>…), possessive quantifiersa++, subroutine calls, and then(named-captures-only) andx(free-spacing) flags. Compiled down to standard JavaScript, so they run on the engine already shipping. Free on every tier, including the free one (v1.3) - Share a pattern by link — a permalink anyone can open in the browser, with a generated preview card naming the flavor, and single-pattern JSON export for when you want to send one pattern rather than the whole library (v1.3)
- Shell is three tools, not one — choose BSD
grep,sedorawkand the engine behaves like that tool: its dialect, its quirks, and which backslash escapes it silently ignores rather than honours. Runs on a bundled TRE engine, so nothing on your machine is invoked (v1.3) - R runs both of its engines in-process — TRE, which base R uses by default, and PCRE2, which
perl = TRUEselects. R's own POSIX character-class tables are ported, so[[:punct:]]answers exactly as R does. No system R needed, and it works on the App Store build, where it previously could not (v1.3) - Engine errors in plain language — when a pattern will not compile, the app says what is wrong and what to change, in all four interface languages, instead of forwarding the engine's own English. Each message is written for the engine that produced it: Perl's lookbehind limit, Java's, and PCRE2's are three different rules and now read as three (v1.3)
- Correctness, mostly — this release is more fixes than features. Every flavor is checked construct-by-construct against the real reference engine, and the disagreements that remain are catalogued with a named cause rather than left to be rediscovered (v1.3)
- Clearer parser error messages, and a quick-reference signpost on the canvas (v1.3)
- VS Code extension — right-click a regex literal to open it in RegexPilot, then edit in either place and watch both stay in step. Sessions survive a window reload, and the editor shows delivery status inline (v1.2)
- JavaScript / TypeScript now run on macOS's own JavaScriptCore — the engine Safari uses — instead of a Rust reimplementation. Full ES2024 support, including set notation like
[\w&&[a-z]]and[\p{L}--[a-z]](v1.1) - Visual AST builder — drag-and-drop, railroad diagram, inspector panel
- Breakdown tree — plain-English explanation, bidirectional hover with the rail
- Authentic engines, bundled: Java (GraalVM AOT), Ruby (Onigmo 6.2.0, statically linked — no interpreter), C# (.NET NativeAOT), PHP (static-php-cli), Python (python-build-standalone), Perl (microperl 5.36.3), Swift (NSRegularExpression), Go (Go stdlib), PostgreSQL (Spencer ARE), MySQL (ICU / PCRE2+UCP), R (TRE and PCRE2, in-process), Shell (TRE — BSD grep / sed / awk dialects). Only Dart and Elixir use a tool from your machine (
dart,elixir); everything else ships inside the app - In-process engines:
JavaScriptCore(JS / TS / Dart — the system framework),regexcrate (Rust / Go / RE2),pcre2-rust(fallback when a system tool is missing) - 21 flavor dispatch with per-flavor syntax support — see the list below
- Match + replace testing with live highlighting, multi-cursor, visual replace builder
- AI chat: OpenAI, Claude, Gemini, DeepSeek, Qwen, Mistral, Groq, OpenRouter, xAI (Grok) — BYO key; plus LM Studio / Ollama / llama.cpp server / LocalAI for offline
- Voice dictation via Whisper Tiny (offline ggml, multilingual)
- Pattern library: 50 curated patterns across 12 flavors, folders, tags, import/export JSON
- Code export for 21 languages (JS, TS, Python, Java, C#, PHP, Ruby, Go, Perl, Rust, Swift, Scala, Kotlin, Groovy, Clojure, Elixir, R, Dart, MySQL, PostgreSQL, Shell)
- PNG / SVG railroad export
- Themes: 9 community palettes + import JSON + system-follow
- Deep links (
regexpilot://), share menu, iCloud Drive-ready file format - AI API keys secured in macOS Keychain — persist across reinstalls, tamper-resistant
- One upgrade prompt, not seven — selecting a paid flavor opens a single modal with a buy or start-trial choice, instead of sending you to Settings to work out what to do
v1.4 and beyond
- Unit-test builder — assertion blocks in the Test panel,
test { match 'foo'; reject 'bar' }, green or red per case - Per-flavor language packs (€3 each) — buy only the flavors you use, with a bulk ladder if you want several
- Step-through debugger for PCRE2 flavors — watch the engine walk the input, backtracking highlighted. PCRE2 only, and we would rather say so than imply otherwise: most of the 21 flavors run engines that expose no trace hook, and faking one by stepping our own AST would show you a debugger for a regex engine you are not using (v1.5)
- Community language packs — translations curated and reviewed by native speakers, in a public GitHub repo (v1.5)
- Community theme gallery — share and install color palettes contributed by other users; same public repo as the language packs (v1.5)
- Opt-in: use a system-installed interpreter — point RegexPilot at your own Python, Ruby or Perl when you have one. Direct-download builds only; the App Sandbox does not permit it on the App Store build (exploring)
- Flavor translator — paste a regex, pick source and target flavor, get a semantic-equivalent rewrite with a portability report (exploring)
- Test against your own environment — point RegexPilot at a dev container or a running interpreter on your machine, and the regex goes to that engine (exploring)
- Community pattern gallery — shared patterns, if it can be done without asking you to trust a server we run (exploring)
- What you ask for — vote on GitHub; the queue above moves when the votes say so
Answers, before you ask.
Does a regex work the same in every programming language?
No. We ran 534 test patterns on the real engines of 16 languages: 264 come back different in at least one of them, and only 83 fail with an error — the rest silently return different matches, or none at all. That is why RegexPilot runs your pattern on the actual engine for your target language instead of approximating it in JavaScript.
Which regex flavors does RegexPilot support?
21 flavors: JavaScript, TypeScript, Python, Java, C#, PHP, Ruby, Go, Perl, Rust, Scala, Kotlin, Groovy, Clojure, Elixir, R, Dart, Swift, MySQL, PostgreSQL and POSIX shell. Each routes to the real engine its production code uses — CPython, MRI Ruby, GraalVM Java, .NET, PCRE2, RE2 and more.
Does RegexPilot work offline?
Yes. All engines are bundled inside the app and run locally. There is no account, no telemetry and no cloud calls by default — the only exception is if you explicitly create a public share link, which sends the pattern, flags, and flavor to our server. AI pattern generation is optional — bring your own API key, or run fully offline with LM Studio, Ollama, llama.cpp.
How much does RegexPilot cost?
The visual builder with JavaScript and TypeScript engines is free. A one-time €19 license unlocks all 21 flavors with their authentic engines, AI generation and an unlimited pattern library. No subscription.
Regex you can see.
Free forever for JavaScript & TypeScript. €19 one-time unlocks all 21 flavors with authentic native engines — no subscription. Try every flavor free for 30 days. Free updates throughout v1.x; v2 owners get a 50% upgrade discount.
Also on the Mac App Store — same app, Apple handles the payment and updates.
brew tap kristofp/regexpilot
brew install --cask regexpilot