See what your regex actually matches
Regular expressions are powerful and hard to read. A pattern that looks fine can match too much, too little, or nothing. Testing it against real text is the only way to know.
Type a pattern, paste your sample text and watch the matches light up. You get the index of each match, the contents of every capture group, runtime stats and a preview of what a replacement would produce.
JavaScript flavor only
The tester uses the JavaScript regex engine. That's what runs in browsers and Node. Python, PCRE and other flavors mostly overlap, but they differ on features like lookbehind rules, named group syntax and flags. A pattern that works here may need small changes elsewhere.
The tool shows you matches, not a plain-English translation of the pattern. If you're unsure what part of a pattern does what, build it up in pieces and watch how the matches change.
Flags change everything
The g flag finds all matches instead of stopping at the first. The i flag ignores case. The m flag makes caret and dollar match at line breaks, which matters for multiline text. The s flag lets the dot match newlines too. Turn them on and off and see the difference right away.
Capture groups
Parentheses create a group. The text it matched is saved, and you can reuse it in a replacement with $1, $2 and so on. Named groups, written as (?<name>...), are easier to read in long patterns.
Use (?:...) when you need grouping for structure but don't need to save the text. It keeps the numbered groups tidy.
Greedy versus lazy
Quantifiers like * and + are greedy. They grab as much text as they can. Add a question mark and they become lazy, taking as little as possible. This matters a lot with delimiters. Run <.+> on a line with two HTML tags and it swallows everything between the first open bracket and the last close bracket. Run <.+?> and you get each tag.
When a regex matches more than you expected, greedy quantifiers are the first thing to check.
Slow patterns
Some patterns with nested quantifiers can take forever on certain input, because the engine tries too many paths. The runtime stat helps you catch that. If a test takes noticeably longer as the text grows, simplify the pattern before it reaches production.
Practice tips
Test with text that should match and text that shouldn't. Edge cases are where regexes break.
Anchor patterns with ^ and $ when you validate a whole value. Without them, a pattern can match a piece in the middle of bad input.
Don't parse HTML with regex. Use a parser.
Everything runs in your browser, so your sample text stays with you.