Home / Developer tools / Regex Tester
Browser-native developer utility

Test patterns.
See matches.

Build and inspect JavaScript regular expressions with live highlighting, flags, capture groups, character indices, and clear syntax errors — all in the active browser.

JavaScript RegExpLive capture groupsNo accountLocal matching
Abstract Toolyfi regex pattern workspace with capture-group bracketsToolyfi

Regex workspace

Enter a pattern and text. Match details update as you type.

Runs locally in this browser
//

Match output

Ready
0matches found
0capture groups
0test characters
Regex guide

How to use a regex tester without guessing

A regular expression, often shortened to regex, is a compact pattern language for describing text. A pattern can find a word, split a record, validate a narrow input shape, or pull pieces from structured text. The compact syntax is powerful, but it is also easy to misread. A tester gives the pattern a safe place to meet representative text before it is placed inside a form, script, transformation, or application rule. This Toolyfi page deliberately uses the JavaScript RegExp engine in the browser, so its behavior is closest to browser and Node.js code rather than a different server-side regex flavor.

Start with a concrete question. Instead of beginning with a dense expression, decide what a successful match should look like, what must not match, and where the text may vary. Then write the smallest pattern that expresses that rule. For example, \\b\\d{4}-\\d{2}-\\d{2}\\b describes a date-shaped sequence such as 2026-08-21. It does not establish that the date exists on a calendar, identify who entered it, or prove that a record is trustworthy. Keeping those limits visible makes a regex easier to review and less likely to be used as a false security boundary.

Read the workspace in four parts

The pattern field holds the expression without enclosing slash characters. Choose flags with the small controls beneath it. The test string is the sample data that JavaScript searches. The right panel paints each non-overlapping match and lists its index, length, full value, and any captured values. A numbered capture group appears whenever ordinary parentheses surround part of the pattern. This layout separates the specification from its evidence: you can see what was written, exactly where it matched, and what the groups returned.

Use varied samples rather than a single happy-path sentence. Include a valid case, a nearly valid case, different capitalization, line breaks, empty fields, punctuation, and values at the beginning and end of the string. A pattern that only succeeds on one hand-made example may be too narrow or too broad in real data. The global flag is particularly important in a tester: with g enabled, JavaScript keeps scanning to display all non-overlapping matches. Without it, the same expression usually reports only the first match, which can make a useful pattern look incomplete.

Local-only boundary: this tester constructs a JavaScript RegExp and searches text in the current browser. It does not fetch URLs, call an API, submit the contents, or save the pattern. Do not paste secrets merely because a tool is local; follow your own handling rules.

Choose flags intentionally

Flags change how a pattern is evaluated. The i flag makes applicable comparisons case-insensitive, which is useful for a keyword search where uppercase and lowercase should mean the same thing. The m flag changes the meaning of ^ and $ so they can match the start and end of individual lines. It does not make a dot match a line break. For that behavior, use s, known as dotAll. The u flag enables Unicode-aware behavior for many modern JavaScript features. Flags are not decorations: change one at a time and observe how the result moves.

A common source of confusion is mixing a regex flag with a pattern token. A global search uses g outside the expression, while a global-looking character class such as [A-Z] is part of the pattern itself. Likewise, boundaries such as \\b can be useful for finding a whole ASCII-style word, but their exact behavior depends on the engine's word-character rules. If your data includes non-English names or symbols, test those characters directly rather than assuming an example written for English behaves identically.

Use capture groups for extraction

Parentheses create capture groups. Consider the email-shaped example ([\\w.+-]+)@([\\w-]+\\.[\\w.-]+). The whole match is the complete address. Group one is the text before the at sign, and group two is the domain-shaped text after it. A tester is valuable here because it shows both the whole match and the individual pieces. If you intended a group to be structural only, use non-capturing parentheses, (?:...), so it does not alter group numbering.

Groups are not automatically validation. An address pattern can identify a candidate string, but it cannot confirm mail delivery, account ownership, or permission. In the same way, a date-shaped capture can pull year, month, and day text, but application code must still decide whether a date is acceptable. Good implementation separates text parsing from domain checks: let the regex capture a shape, then validate the resulting values with clear rules and appropriate sources.

Build patterns from small tokens

Character classes are an approachable next step. [abc] matches one character chosen from a, b, or c. [A-Z] matches one uppercase English letter. A negated class begins with ^ inside the brackets, so [^,]+ means one or more characters that are not a comma. The shorthand \\d is often used for digits, \\s for whitespace, and \\w for word characters. Quantifiers describe how many times the preceding token may occur: ?, *, +, and {n,m}.

Build incrementally. Test the literal text first. Add one class. Add a quantity. Add a boundary or group only when the earlier version behaves as expected. This process exposes the exact step that introduces an unwanted match. It is also easier for another developer to review than a pattern assembled in one large jump. Keep an example table next to production code when a complicated expression must stay: list the inputs that should match, the inputs that should fail, and the group values that matter.

Anchors, alternation, and line-based text

Anchors constrain position. ^ normally targets the beginning of the input and $ the end. With multiline mode selected, they can target individual line boundaries. This is useful when checking a line-oriented log or configuration list. Alternation uses a pipe: cat|dog means cat or dog. Parentheses can scope alternation, as in ^(cat|dog)$, which accepts exactly one of those complete values. Without the anchors, the same token can match as part of a longer sentence.

When a result is surprising, inspect the index field in the match panel. It points to the zero-based character offset JavaScript returned. That makes it easier to spot a hidden space, a newline, or an earlier substring that won the match. The highlighted preview is designed for reading, while the detailed records are designed for checking. Use both. A highlighted result can look plausible even when the first match begins earlier than you expected; the index and group values make the behavior explicit.

Treat syntax errors as useful feedback

A malformed regular expression should not be silently repaired. An unmatched parenthesis, a broken character range, unsupported syntax, or an invalid flag may make the browser reject the pattern. The status label above reports the native error message instead of pretending that no matches were found. Correct the earliest structural problem first, then retest. For an opening bracket, look for its closing bracket. For a literal dot, escape it as \\.. For a literal plus or question mark, escape it too. Error messages are clues, not a replacement for understanding the pattern.

JavaScript regex features can vary from another flavor. A pattern copied from a PCRE documentation page may use modifiers, escapes, or constructs that JavaScript does not recognize. Begin by identifying the target runtime. If the pattern will run in a browser, test it here with JavaScript semantics. If it will run in a database, Python service, or .NET application, use that environment's documentation and tests before deployment. A cross-flavor comparison is not a production proof.

Write regexes that remain maintainable

Prefer a readable pattern and a short explanation over a clever but opaque one. Name the business rule outside the expression, comment a non-obvious group, and use small constants in code. Be cautious with nested broad quantifiers such as (.*)+; on some inputs they can create slow matching behavior. A tester can show correctness on a small sample, but it cannot fully benchmark untrusted, high-volume production traffic. Set input limits, use the right engine for the job, and review performance where the expression will actually run.

Finally, decide whether regex is the right tool. A URL can often be parsed with the browser's URL API. JSON should be parsed with JSON.parse. Dates should be interpreted by deliberate date logic. Regex is ideal for locating recurring text patterns and extracting predictable fragments, not for replacing every structured parser. You can use Toolyfi’s JSON Formatter, URL Encoder & Decoder, and Base64 Encoder alongside this tester when each transformation needs a dedicated, clearer tool.

Test for false positives, not only success

A pattern is often judged by whether it finds one expected value. That is only half of the job. A useful test set also contains values that look similar but must fail. If a pattern is intended to identify a product code, include a missing dash, a too-long segment, an empty segment, a value embedded inside a larger word, and an unrelated punctuation mark. Place these examples next to a genuine match in the same test string. The highlighted output will reveal whether an expression is consuming a character that belongs to its neighbor or skipping an allowed variation.

This discipline is especially helpful with broad tokens such as dot and \\w. A dot can match almost any character except a line terminator unless dotAll mode is active. A word-character shorthand is not a promise that a field is a human name or a safe account identifier. Give every expression a short collection of positive and negative examples. When requirements change, add an example first, observe the old behavior, then adjust the pattern. Over time, that collection becomes a lightweight specification rather than a memory of why a dense expression was written.

Escape punctuation deliberately

Regex punctuation is one of the most common sources of accidental behavior. A plain period means “any single character,” while \\. means a literal period. The same distinction matters for plus, question mark, asterisk, parentheses, square brackets, curly braces, pipe, caret, dollar sign, and backslash. When you search for a literal punctuation mark, escape it unless the current context clearly makes it ordinary. In a character class, some rules change again; the hyphen can describe a range when placed between characters.

A practical habit is to begin by typing the literal example text, run it, and only then convert the changing pieces into tokens. For a domain-like value, test the literal dot before adding a character class for the labels. For a version string, decide whether a plus sign is content or a quantifier. This small sequence prevents the expression from becoming mysterious. It also makes a review conversation clearer because every metacharacter has a stated purpose instead of being copied from a pattern collection.

Make whitespace and line endings visible

Many matching failures are invisible at first glance. A sample may contain a trailing space, a tab, a non-breaking space, or a line ending copied from another system. The index and character length shown in this workspace help expose where a visible-looking word begins and ends, but the test set should still include line breaks and extra whitespace when real input can contain them. Use \\s only when the rule truly allows all whitespace characters; use a literal space when one ordinary space is the intended requirement.

In multi-line text, ask whether a match may cross a line boundary. A careless broad token can swallow adjacent records. If each line is a separate record, use multiline mode with anchors and test a blank line between samples. If the content comes from a form field, consider trimming or normalizing it in the application before matching. That decision belongs to the input contract, not to a hidden regex workaround. A good tester helps distinguish a pattern issue from an input-cleaning decision.

Use named groups when code needs clarity

Modern JavaScript supports named capture groups, for example (?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2}). The pattern still matches a date-shaped string, but application code can refer to meaningful labels instead of remembering that group one is the year and group three is the day. This is helpful when a pattern grows or when several people maintain it. Before relying on a newer feature, verify the browsers or runtime versions that will execute it.

Numeric groups remain useful for a short local extraction, but their positions can shift when another parenthesis is added. Non-capturing groups reduce that risk when a group exists only to control precedence. A tester makes the distinction visible: adding ordinary parentheses will add a capture value to the output; adding (?:...) will not. Keep only the captures that downstream code genuinely reads. That makes both the match details and the eventual implementation easier to understand.

Check real-world characters directly

Sample data written only with simple English characters can hide internationalization problems. Names, addresses, titles, and comments may include accented letters, Arabic script, Urdu, emoji, combining marks, or punctuation that looks like an ASCII dash but is not one. Select the Unicode flag when the intended JavaScript behavior calls for it, but do not assume it turns a broad shorthand into a complete human-language validator. Test the actual characters your product accepts and record the expected result.

Unicode property escapes such as \\p{L} can be useful in modern JavaScript when a rule concerns letters across scripts, usually with the u flag. They should be introduced with compatibility and product requirements in mind, not merely because they look more advanced. A name policy may allow spaces, apostrophes, and hyphens in addition to letters. Regex can help express a narrow text rule, but a fair product experience also needs accessible error messages and a way for genuine users to resolve edge cases.

Use lookarounds only when they make the rule clearer

Lookarounds describe context without consuming it. A lookahead can require a next token, while a lookbehind can require text immediately before the match. These tools are useful for a precise extraction, but they can make an expression difficult to read and may have compatibility limits in older environments. First ask whether a captured delimiter followed by simple application logic would be clearer. A regex that is easy to explain is often easier to troubleshoot later.

When you do use a lookaround, give it an explicit counterexample. For instance, a negative lookbehind intended to avoid matching a word inside an email address should be tested next to an ordinary sentence occurrence and a similar string that has a different delimiter. Inspect the exact index returned by the tester. A contextual assertion may be correct on a short sentence but unexpected at the start of input, at a line break, or beside an emoji. Testing those edges turns a clever pattern into a documented rule.

Separate format checks from business validation

A regex can check whether an invoice number resembles a chosen convention or whether a local identifier contains only permitted characters. It cannot tell whether the invoice is authorized, whether a number exists in a database, whether a date is valid for a transaction, or whether a user may perform an action. Treat a regex as one validation layer among several. Parse structured values with suitable APIs, query authoritative systems where necessary, and enforce authorization on the server.

This separation also improves error messages. Instead of returning “invalid input” for every failure, distinguish a missing field, an unexpected character, a malformed structure, and a value that is not accepted by business rules. Regex can support the shape check, but it should not be made responsible for decisions it cannot know. Never use a pattern as a security filter for HTML, SQL, shell commands, or permissions; use context-appropriate encoders, parameterized APIs, validation, and access controls.

Avoid patterns with costly ambiguity

Most small expressions are fast on ordinary input, but some combinations of nested or overlapping quantifiers can take much longer on a carefully chosen near-match. This is a concern when an application evaluates user-controlled text at scale. Expressions such as a broad repetition inside another broad repetition deserve review, especially when followed by a token that is absent near the end of a long string. A visual tester is useful for correctness; production profiling and input limits are still necessary for performance confidence.

Reduce ambiguity by making tokens specific where possible, anchoring the expression when the whole value must match, and avoiding repeated catch-all fragments. If a parser or simple string operation can do the job, it may be easier to reason about and less prone to slow paths. At the integration layer, limit request sizes and avoid running expensive validation repeatedly on every keystroke for large content. Performance is a system property, not only a property of the pattern itself.

Move from the tester into production carefully

Once a pattern behaves as expected here, copy it into a small automated test suite in the language and runtime where it will ship. Include the same positive and negative examples used in the workspace. If the target is not JavaScript, do not assume the syntax ports unchanged. Record the regex flavor, flags, expected captures, and why the expression exists. This information matters more than making the expression as short as possible.

A dependable workflow is: describe the input contract, gather representative samples, build the smallest pattern, inspect matches and groups, add near-misses, test target runtime behavior, and review performance or security boundaries. Revisit the pattern when the data format changes. The goal is not to write the most elaborate regex; it is to create a clear, tested text rule that another person can safely maintain. Toolyfi’s browser-local workspace is the first inspection step, not a substitute for integration testing or domain knowledge.

Keep the finished pattern close to the examples that justify it. Future maintainers should be able to see the allowed input shape, the rejected look-alikes, the selected flags, and the expected capture values without reverse-engineering every symbol. That small amount of documentation makes regex work safer to change, easier to test, and more reliable when a product expands to new data or languages.

Practical questions

Regex Tester FAQ

Which regex flavor does this tester use?

This tool uses JavaScript RegExp semantics in your browser. Other flavors can differ in syntax and behavior.

Does this tester send my text anywhere?

No. Matching and rendering run locally in this browser tab; the page does not submit or store the entries.

What does the global g flag do?

It lets JavaScript continue through the text and list all non-overlapping matches instead of only the first one.

What are capture groups?

Parentheses can retain parts of a match. The output panel lists the whole match and each captured group.

Why does my pattern show a syntax error?

Look for an unclosed bracket or parenthesis, an invalid range or flag, or syntax unsupported by JavaScript.

What does the i flag do?

It makes matching case-insensitive for applicable characters, allowing upper- and lower-case variants.

When should I use multiline mode?

Use m when anchors should match at line boundaries as well as the start or end of the complete input.

Why are zero-length matches not painted?

They are listed in match details, but no span can be highlighted because they cover no visible characters.

Can a regex prove input is safe?

No. It checks a text shape only. Use proper parsing, authorization, validation, and security controls for real decisions.

Can I test replacements here?

This focused workspace tests matching and extraction. Verify replacement syntax in the language or editor where it will run.