What it matched
Contact: ada@example.com and grace@filetity.com Invoice INV-2026-0917 dated 2026-09-10, total 1,240.50 Ring 020 7946 0958 or +44 7700 900123
As a literal
/[\w.]+@[\w.]+\.\w+/g
PATTERN + TEXT -> MATCHES · Local tool
Regex Tester
Test a regular expression against your own text, with live matches and groups.
Last updated
How do I test a regular expression online?
Type the pattern and the text into filetity's regex tester and every match is highlighted as you type, with the capture groups listed underneath and the pattern shown as a literal you can paste into code. It runs the pattern in a worker with a two second budget, so a pattern with nested repetition gets stopped and explained rather than freezing the tab, which is what happens on most testers. Turn on Replace to preview the result of a substitution, with $1, $<name> and $& all working the way String.replace does. Nothing you type is uploaded.
01 / Your device
the file stays here
02 / Browser memory
the work runs locally
03 / Back to you
saved on this device
When you would use this
Situations, not settings.
- A pattern that works on the sample and not on the real file
- Paste the real lines in and every match highlights as you type, so you can see which ones it is skipping rather than guessing.
- A pattern that hangs the tool you pasted it into
- This one runs in a worker with a two second budget and stops, then names the nested repetition that caused it, instead of freezing the tab.
- Log lines and customer records you cannot paste into a website
- Nothing leaves the tab. The text you are testing against is the sort that usually rules out an online tester entirely.
How it works / no cloud
A conversion engine, not an upload form.
The pattern runs in a Web Worker rather than on the page, and the worker is killed if it has not answered in two seconds. That is not caution for its own sake: a pattern like (a+)+b takes longer than the universe has existed on a forty character string, and it spends that time inside one synchronous call to the regex engine, where no timer on the page can interrupt it. Terminating the worker is the only thing that stops it, which is why every other in-page tester can be frozen by a pattern somebody pasted. Syntax errors are rewritten into what to do about them, and the replacement preview runs on the matches already found rather than executing the pattern a second time.
- Offline ready
- Installable app
- No file limit queue
Straight answers
No accordion. Nothing hidden.
- Is it free?
- Yes, with no watermark and no page limit.
- Does it need an account?
- No. There is no account system.
- Is my file processed on my device?
- Yes. The file is read by your browser and never uploaded. There is no server to send it to.
- What formats are supported?
- JavaScript regular expressions, the flavour your browser and Node run. All six flags, capture groups, named groups, and $1, $<name> and $& in a replacement.
- What are the limits?
- The first 5,000 matches are shown, and a pattern that has not finished in two seconds is stopped. Other flavours differ: PCRE lookbehind, Python's named group syntax and .NET balancing groups are not JavaScript and will not compile here.
- Does it work on mobile?
- Yes, on any modern mobile browser. Large files are limited by the memory the phone gives the browser.
- Does it work offline?
- Yes, once the page has loaded. The tool keeps working with no network connection.
- Why did my pattern get stopped?
- It was still running after two seconds. Nested repetition is the usual cause: (a+)+, (a|a)* and (\s*,)* make the engine try every possible way of splitting the text, and the number of ways doubles with each extra character. Making the inner part more specific, so only one split is possible, fixes it and is worth doing before the pattern reaches production.
- Which flavour of regex is this?
- JavaScript, exactly as your own browser implements it, because the pattern is compiled by the same engine your code will use. That means lookbehind works in current browsers, named groups are (?<name>...), and there is no /x verbose mode. A pattern copied from Python, PHP or .NET may need changing.
- What is the g flag actually doing?
- Making the search continue past the first match. Without it a pattern finds one match and stops, which is what you want for validating a whole string and not what you want for finding every email in a document. It is on by default here because a tester with it off looks broken.
- Is my text sent anywhere?
- No. The pattern and the text stay in this tab, and the worker that runs them is created from a blob in the page rather than fetched. People test regexes against log lines and customer records, which is exactly the sort of text that should not be pasted into somebody else's server.
Keep working locally
7 available · more coming
- JSON Formatter and ValidatorFormat, beautify, validate and read JSON, and find the line that broke it.
- Word and Character CounterCount characters and words live, against the limits you are writing for.
- CSV to JSONTurn a CSV or TSV file into JSON, as an array of objects or as rows.
- Base64 decode and encodeDecode base64 to text, or encode text to base64, without leaving the page.
- URL Decoder and EncoderTurn %20 and %C3%A9 back into readable text, or encode text for a URL.
- XML formatterFormat, beautify and validate XML, with real error positions.