Feature support across 8 regex engines — verified by running the same patterns through each real engine, not by reading docs alone.
Test a pattern in all 8 engines side by side → RegexTester.dev Free, no sign-up. Every engine runs in your browser via WebAssembly, so results are flavor-accurate.| Feature | PCRE2 | RE2 | JavaScript | Python | Go | Java | .NET | Rust |
|---|---|---|---|---|---|---|---|---|
Lookahead (?=…) (?!…) | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
Lookbehind (?<=…) (?<!…) | ✓ variable length | ✗ | ✓ variable length (ES2018) | ✓ fixed width | ✗ | bounded length | ✓ variable length | ✗ |
Backreferences \1 | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ |
| Named groups | (?<n>…) | (?P<n>…) | (?<n>…) | (?P<n>…) | (?P<n>…) | (?<n>…) | (?<n>…) | (?P<n>…) |
Atomic groups (?>…) | ✓ | ✗ | ✗ | 3.11+ | ✗ | ✓ | .NET 7+ | ✗ |
Possessive quantifiers x*+ | ✓ | ✗ | ✗ | 3.11+ | ✗ | ✓ | ✗ | ✗ |
Recursion (?R) / subroutines | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | balancing groups | ✗ |
Unicode properties \p{L} | ✓ | ✓ | ✓ with u flag | ✓ | ✓ | ✓ | ✓ | ✓ |
Free-spacing mode (?x) | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ |
Match-start reset \K | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
Conditionals (?(1)…) | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Linear-time guarantee (no catastrophic backtracking) | ✗ | ✓ | ✗ | ✗ | ✓ | ✗ | with timeout | ✓ |
(a+)+$ ReDoS trap.\K, callouts. If a Stack Overflow answer uses (?R), it's PCRE/Perl territory.\1 or (?<=…) works in Python and JavaScript, then silently breaks when you move it to Go or Rust — both engines reject it at compile time. Run it through the compatibility checker before you ship.
Every cell in the table above can be reproduced in a browser: