- Which regex flavor does this support?
- JavaScript / ECMAScript only. The pattern is compiled with the browser's native RegExp constructor, so anything that runs in modern V8/SpiderMonkey/JavaScriptCore works — including lookbehinds, named groups, and Unicode property escapes (\p{Letter}). Patterns from PCRE, Perl, Python, or .NET that rely on those engines' extensions (recursion, balanced groups, possessive quantifiers, conditionals) won't parse here — translate them first.
- What are the flags doing?
- g (global): find every match, not just the first. i (case-insensitive): A matches a. m (multiline): ^ and $ anchor at every line break, not just at the start/end of input. s (dotAll): . matches newlines. u (unicode): treats the pattern as a sequence of Unicode code points and enables \p{} property escapes. y (sticky): match starting only at lastIndex, no skipping ahead.
- Why does my pattern run forever or hang the browser?
- Catastrophic backtracking — usually from nested quantifiers like (a+)+ against a long mismatching string. The browser's RegExp engine doesn't time out, so this tool can hang the tab if you write one. Test with a short input first; if a 100-char string takes more than a second, your pattern needs rewriting (often as a possessive quantifier or atomic group, neither of which JavaScript supports — so you may need to restructure entirely).
- Does this support replace mode?
- Yes. The replacement field uses standard String.prototype.replace semantics: $1, $2, ... refer to capture groups, $<name> for named groups, $& for the whole match, $$ for a literal dollar. Without the g flag only the first match is replaced.
- Anything sent to a server?
- No. Pattern, flags, test input, and replacement string all run via the browser's RegExp + String APIs. Nothing leaves your device — useful when testing patterns against snippets of customer data, log lines, or PII you don't want to upload to a third-party service.