rgx
A terminal regex tester with real-time matching and multi-engine support
Test and debug regular expressions without leaving your terminal. Written in Rust.

Press F1 in the app for a multi-page cheat sheet with keyboard shortcuts, regex syntax, and engine-specific features.
Who is this for?
rgx is useful if you:
- Work on remote servers where opening a browser isn't practical — SSH sessions, containers, air-gapped environments
- Want to pipe regex results into other commands (
echo "log" | rgx -p '\d+' | sort) — regex101 can't do this - Need to test against specific engine behavior — check if your pattern works in Rust's
regexcrate vs PCRE2 without guessing - Prefer staying in the terminal and find the context switch to a browser tab disruptive
If you write regex a few times a month and regex101.com works fine for you, it probably still will. rgx is strongest for developers who do regex-heavy work in terminal-centric workflows.
Features
- Real-time matching — matches update on every keystroke
- Syntax-highlighted pattern input — AST-based coloring for groups, quantifiers, character classes, anchors, and escapes
- 3 regex engines — Rust
regex(default),fancy-regex(lookaround/backrefs), PCRE2 (full features) - Capture group highlighting — distinct colors per group, nested group support
- Plain-English explanations — walks the regex AST to generate human-readable breakdowns
- Replace/substitution mode — live preview with
$1,${name},$0/$&syntax - Match detail + clipboard — navigate matches/captures with Up/Down, copy with Ctrl+Y
- Pattern history + undo — Ctrl+Z/Ctrl+Shift+Z undo/redo, Alt+Up/Down browse history
- Context-sensitive cheat sheet — F1 multi-page help: shortcuts, regex syntax, engine-specific features
- Whitespace visualization — toggle with Ctrl+W to show spaces as
·, newlines as↵, tabs as→ - Mouse support — click to focus/position cursor, scroll to navigate panels
- Engine selector — switch engines with Ctrl+E, see where behavior differs
- Regex flags — toggle case-insensitive, multiline, dotall, unicode, extended
- Stdin pipe support —
echo "test string" | rgx '\d+' - Non-interactive batch mode —
rgx -p -t "input" 'pattern'prints matches to stdout and exits - JSON output —
--jsonoutputs structured match data with positions and capture groups - Colored output —
--color auto|always|neverhighlights matches likegrep --color - Pipeline composability — pipe in, filter, pipe out:
cat log | rgx -p '\d+' | sort -n - regex101 URL export — Ctrl+U generates a regex101.com URL and copies to clipboard
- Project workspaces —
-w project.tomlsaves/loads regex state to a file — track in git - Shell completions —
--completions bash|zsh|fishfor tab completion - Vim mode — optional modal editing (
--vimorvim_mode = true) with Normal/Insert modes, h/j/k/l navigation, w/b/e word motions, dd/cc/x editing, and all global shortcuts preserved - Recipe library — built-in common patterns (email, URL, IP, semver, etc.) — Ctrl+R to browse and load
- Cross-platform — Linux, macOS, Windows
Installation
From crates.io
From prebuilt binaries
Download from GitHub Releases.
Shell installer
|
Homebrew
From source
With PCRE2 engine (requires libpcre2-dev)
Usage
# Interactive mode
# Vim mode (modal editing)
# Start with a pattern
# Pipe text from stdin
|
# Use a specific engine
# With flags
# With replacement template
# Non-interactive batch mode (--print / -p)
|
# Count matches only (--count / -c)
|
# Extract a specific capture group (--group / -g)
|
# Batch replacement
# JSON output with match positions and capture groups
|
# Colored output (like grep --color)
|
# Pipeline composability
| | |
# Project workspace — save/load regex state to a file
# Capture final pattern after interactive editing
PATTERN=
# Generate shell completions
# Exit codes: 0 = match found, 1 = no match, 2 = error
||
Keyboard Shortcuts
| Key | Action |
|---|---|
Tab |
Cycle focus: pattern / test / replace / matches / explanation |
Up/Down |
Scroll panel / move cursor / select match |
Enter |
Insert newline (test string) |
Ctrl+E |
Cycle regex engine |
Ctrl+Z |
Undo |
Ctrl+Shift+Z |
Redo |
Ctrl+Y |
Copy selected match to clipboard |
Ctrl+R |
Open regex recipe library |
Ctrl+W |
Toggle whitespace visualization |
Ctrl+O |
Output results to stdout and quit |
Ctrl+S |
Save workspace |
Ctrl+U |
Copy regex101.com URL to clipboard |
Ctrl+B |
Benchmark pattern across all engines |
Ctrl+Left/Right |
Move cursor by word |
Alt+Up/Down |
Browse pattern history |
Alt+i/m/s/u/x |
Toggle flags (case, multiline, dotall, unicode, extended) |
F1 |
Show help (Left/Right to page through) |
Mouse click |
Focus panel and position cursor |
Mouse scroll |
Scroll panel under cursor |
Esc |
Quit (or Normal mode in vim) |
Vim Mode (--vim)
| Key | Mode | Action |
|---|---|---|
i / a / I / A |
Normal | Enter Insert mode (at cursor / after / line start / line end) |
o / O |
Normal | Open line below / above and enter Insert mode |
Esc |
Insert | Return to Normal mode |
h / j / k / l |
Normal | Left / down / up / right |
w / b / e |
Normal | Word forward / backward / end |
0 / $ / ^ |
Normal | Line start / end / first non-blank |
gg / G |
Normal | First line / last line |
x |
Normal | Delete character under cursor |
dd |
Normal | Delete line |
cc |
Normal | Clear line and enter Insert mode |
u |
Normal | Undo |
p |
Normal | Paste from clipboard |
Esc |
Normal | Quit |
All global shortcuts (Ctrl+*, Alt+*, F1, Tab) work in both modes.
Engines
| Engine | Features | Dependencies |
|---|---|---|
| Rust regex (default) | Fast, linear time, Unicode | Pure Rust |
| fancy-regex | + lookaround, backreferences | Pure Rust |
| PCRE2 | + possessive quantifiers, recursion, conditionals | Requires libpcre2 |
Comparison
vs. terminal alternatives
| Feature | rgx | regex-tui | rexi |
|---|---|---|---|
| Real-time matching | Yes | Yes | Yes |
| Multiple engines | 3 | 2 | 1 |
| Capture group highlighting | Yes | No | No |
| Plain-English explanations | Yes | No | No |
| Replace/substitution | Yes | No | No |
| Match clipboard copy | Yes | No | No |
| Undo/redo | Yes | No | No |
| Whitespace visualization | Yes | Yes | No |
| Mouse support | Yes | No | No |
| Regex flags toggle | Yes | Yes | No |
| Stdin pipe support | Yes | Yes | Yes |
| Built-in recipe library | Yes | No | No |
| Vim keybindings | Yes | No | No |
| Non-interactive batch mode | Yes | No | No |
| JSON output | Yes | No | No |
| Colored batch output | Yes | No | No |
| regex101 URL export | Yes | No | No |
| Shell completions | Yes | No | No |
vs. regex101.com
regex101.com is the more capable tool overall — it has 8 engines, step-through debugging, code generation, shareable permalinks, and a community pattern library. rgx doesn't try to replace it. Where rgx is useful instead:
- Offline/remote work — no browser or internet needed
- Pipeline integration —
echo data | rgx -p 'pattern' | next-command— non-interactive batch mode with proper exit codes - Engine-specific testing — test against Rust's
regexcrate directly (regex101 doesn't have this engine) - Workspace save/restore — save your session and pick up later (
-w project.toml) - Bridge to regex101 — Ctrl+U exports your current state as a regex101.com URL for sharing
Configuration
rgx looks for a config file at ~/.config/rgx/config.toml:
= "rust" # "rust", "fancy", or "pcre2"
= false # enable vim-style modal editing
Editor & Terminal Integration
VS Code
Install from the VS Code Marketplace, or search "rgx" in the Extensions panel.
Commands (open via Ctrl+Shift+P / Cmd+Shift+P):
rgx: Open— launch rgx in the integrated terminalrgx: Open with Selection— pass selected text as test inputrgx: Open with Pattern— pass selected text as the regex pattern
Neovim
Using lazy.nvim:
Or copy plugin/nvim/lua/rgx/init.lua to your Neovim config:
require.
Commands:
:Rgx— open rgx in a floating terminal:Rgx pattern— open with a pre-filled pattern- Visual select +
:'<,'>Rgx— pass selection as test input
Zed
Copy plugin/zed/tasks.json to your project's .zed/tasks.json (or merge into an existing one).
Run tasks via Cmd+Shift+P → "task: spawn" → select an rgx task.
tmux
# Open rgx in a tmux popup
# Open with a pattern
Contributing
See CONTRIBUTING.md for details.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
at your option.