filemarkr
All ToolsGuides
filemarkr

60+ free developer tools that run entirely in your browser — JSON formatter, JWT decoder, Base64, diff checker, regex tester, hash generator and more. No upload, no sign-up, completely private.

JSON & Data

  • JSON Formatter
  • JSON Minifier
  • JSON Validator
  • JSON to CSV
  • CSV to JSON
  • JSON to YAML

Encode & Decode

  • Base64 Encode / Decode
  • Base64 to Image
  • Image to Base64
  • URL Encode / Decode
  • HTML Entity Encoder
  • JWT Decoder

Text Tools

  • Text Diff Checker
  • Case Converter
  • Word & Character Counter
  • Slug Generator
  • Remove Duplicate Lines
  • Sort Text Lines

Generators

  • UUID Generator
  • Password Generator
  • Lorem Ipsum Generator
  • QR Code Generator
  • Random Number Generator
  • NanoID Generator

Popular Guides

  • How to Format and Pretty-Print JSON (Without Breaking It)
  • How to Minify JSON and Shrink Your API Payloads
  • How to Validate JSON and Pinpoint the Exact Syntax Error
  • How to Convert JSON to CSV for Excel and Google Sheets
  • How to Convert CSV to JSON (With Proper Header Detection)
  • All guides →

Explore

  • All Tools
  • JSON Formatter
  • JWT Decoder
  • Diff Checker
  • UUID Generator

Company

  • About
  • Privacy
  • Terms
  • Sitemap

Our Promise

  • 100% in your browser
  • Zero uploads
  • No sign-up, always free

© 2026 filemarkr. Designed & developed by Naved Naik.  All processing happens locally in your browser.

All guides

Dev Utilities

How to Test a Regular Expression Before It Breaks Production

Learn how to test regular expressions with live match highlighting, understand flags and groups, and avoid greedy matches and catastrophic backtracking.

Try the toolRegex Tester →

The pattern that works until it doesn't

Regular expressions are the fastest way to search, validate, and extract text — and the fastest way to introduce a subtle bug. A pattern that looks right can silently match too much, skip the case you cared about, or hang on a specific input. The cure is to test the pattern against real sample text and watch what it matches before it reaches production.

How a regex is built

A regular expression is a mix of literal characters and metacharacters that describe a pattern. The building blocks you use constantly:

  • Character classes: \d (digit), \w (word char), \s (whitespace), or a custom set like [a-f0-9].
  • Quantifiers: * (0+), + (1+), ? (0 or 1), and {2,4} (a count range).
  • Anchors: ^ (start), $ (end), and \b (word boundary).
  • Groups: (...) captures, (?:...) groups without capturing, and (?<name>...) captures by name.

Flags change how the whole pattern behaves: g (find all matches, not just the first), i (case-insensitive), m (^ and $ match per line), and s (let . match newlines).

A practical walkthrough

Suppose you want to pull ISO dates out of a log line. Start with a pattern and test it against sample text:

const text = "Deployed 2026-07-15, rolled back 2026-07-16.";
const re = /(\d{4})-(\d{2})-(\d{2})/g;

[...text.matchAll(re)].map(m => ({
  full:  m[0],   // "2026-07-15"
  year:  m[1],   // "2026"
  month: m[2],   // "07"
  day:   m[3],   // "15"
}));

The three (...) groups let you grab the year, month, and day separately, and the g flag returns both dates. Paste the same pattern and text into the Regex Tester and every match lights up in place, with the captured groups broken out — so you can tweak the pattern and see the effect instantly, all in your browser with nothing uploaded.

Common pitfalls

  • Greedy vs lazy quantifiers. <.*> against <a><b> matches the whole string because * is greedy. Use the lazy <.*?> to match one tag at a time.
  • Forgetting to escape. A dot matches any character. To match a literal period (as in a filename or IP address) write \. — 3\.14, not 3.14.
  • Catastrophic backtracking. Nested quantifiers like (a+)+$ can take exponential time on certain inputs and freeze your program. Test with a long non-matching string, and prefer specific classes over nested groups.
  • Missing anchors. To validate a whole string rather than find a substring, wrap the pattern in ^...$. Without anchors, \d{5} happily matches the 12345 inside abc12345xyz.
  • Flavor differences. JavaScript, PCRE, and Python differ on lookbehind, named-group syntax, and Unicode handling. Test in the flavor you will actually run.

When a regex is the wrong tool

Regex shines at pattern matching but struggles with nested structures. Parsing HTML or JSON by hand with a regex is a well-known trap — reach for a real parser instead. If you only need to swap fixed strings across a document, a plain Find and Replace is simpler and safer, and when you want to confirm your replacement changed only what you intended, the Text Diff Checker shows the exact edits.

Conclusion

A regex is only correct once you have seen it match the strings you want and reject the ones you don't. Build the pattern from small pieces, add flags deliberately, anchor when validating, and always test against real and adversarial samples. Live highlighting turns regex from guesswork into something you can iterate on in seconds.

More guides

How to Format and Pretty-Print JSON (Without Breaking It)

Read

How to Minify JSON and Shrink Your API Payloads

Read

How to Validate JSON and Pinpoint the Exact Syntax Error

Read

How to Convert JSON to CSV for Excel and Google Sheets

Read