How it works
Type a pattern without the surrounding slashes and add flags separately — the same split as new RegExp(pattern, flags) in JavaScript. Results update as you type: the match count, each match with its start and end index, every capture group (named groups are labelled), and your test string with matches marked so you can spot what was and was not caught.
The tester uses your browser's own JavaScript regex engine, so behaviour is exactly what you will get in Node.js and front-end code. Most syntax is shared with Python, Java and PCRE, but details differ — for example lookbehind support, possessive quantifiers and the meaning of \w with Unicode text.
Patterns with nested quantifiers like (a+)+ can take exponential time on some inputs ("catastrophic backtracking"). If the page freezes, simplify the pattern. Testing runs locally; your pattern and text are never uploaded.
Frequently asked questions
Why does my pattern find only one match?
Without the g (global) flag a regex stops after the first match. Add g to find them all.
How do I match a literal dot or bracket?
Escape it with a backslash: \. matches a dot, \( a parenthesis, \[ a bracket. Inside a character class most characters are literal, so [.] also matches a dot.
What do ^ and $ match?
By default, the very start and end of the whole text. With the m (multiline) flag they match at the start and end of every line.