Regex Tester & Replacement Preview
Write the pattern and watch the matches appear: enter your expression and flags at the top, put the test text on the left, and see every match highlighted on the right along with its position and capture groups.
Below that you can preview a replacement using $1 and $2 backreferences, so you can iterate without switching tools.
Features
- Live Highlighting — Matches are computed as you type and every hit is marked directly in the test text.
- Flag Toggles — g for global, i for case-insensitive, m for multiline, s for dot-matches-newline and u for Unicode, each switched independently.
- Match Details — Every match lists its text, start position and the value captured by each group.
- Replace Preview — Enter a replacement template and see the result immediately, with $1, $& and the rest of the substitution syntax.
- Common Patterns — Ready-made expressions for email addresses, phone numbers and URLs that you can drop in and adjust.
How to use
- Type the expression into the regex field and tick the g / i / m / s / u flags as needed.
- Paste the content to search into "Test text" on the left.
- Review the highlights and capture group details under "Matches" on the right.
- Switch to replace mode, enter a replacement template and check the preview.
FAQ
Which regex engine does this use?
The browser native JavaScript RegExp engine, following ECMAScript syntax. It is broadly compatible with Python, PCRE and Java, but features such as (?P<name>...) named groups and variable-length lookbehind differ, so keep that in mind when moving a pattern between languages.
Why does my pattern match nothing?
Three common causes: the g flag is off, so only the first occurrence can be found; special characters are unescaped — matching a literal dot requires \.; or m and s are unchecked, so ^, $ and . behave differently from what you expect.
What is the difference between greedy and lazy matching?
The quantifiers * and + are greedy by default and consume as much as possible. Appending a question mark makes them lazy (*? or +?), consuming as little as possible. Against <a><b>, the pattern <.+> matches the whole string while <.+?> matches only <a>.
Does the page record the patterns and text I enter?
No. Matching and replacement both run inside your browser, and your input is never sent to a server.