Advertisement

Positive Lookahead

Assert that pattern is followed by another.

(?=...)         # Positive lookahead
\d(?=px)        # Digit followed by "px"
\w+(?=@)        # Word before @
test(?=ing)     # "test" followed by "ing"

Negative Lookahead

Assert that pattern is NOT followed by another.

(?!...)         # Negative lookahead
\d(?!px)        # Digit NOT followed by "px"
\w+(?!@)        # Word NOT before @
test(?!ing)     # "test" NOT followed by "ing"

Positive Lookbehind

Assert that pattern is preceded by another.

(?<=...)        # Positive lookbehind
(?<=\$)\d+      # Digits after $
(?<=@)\w+       # Word after @
(?<=Mr\.)\w+    # Word after "Mr."
Advertisement

Negative Lookbehind

Assert that pattern is NOT preceded by another.

(?<!...)        # Negative lookbehind
(?<!\$)\d+      # Digits NOT after $
(?<!@)\w+       # Word NOT after @
(?<!un)\w+      # Word NOT after "un"

Combining Lookarounds

Use multiple assertions together.

(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}
# Password: lowercase, uppercase, digit, 8+ chars

(?<=<)(?!/)(\w+)(?=>)
# HTML opening tag name

\b(?!cat|dog)\w+\b
# Word not "cat" or "dog"

Practical Examples

Real-world lookaround usage.

(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}
# Strong password validation

(?<=\$)\d+\.?\d*
# Dollar amount without $

\b\w+(?=\.com)
# Domain name before .com

(?<!\/\/).*(?=:)
# Protocol in URL

(?!.*test).*
# Line not containing "test"

Password Validation

Complex password requirements.

(?=.*[a-z])         # At least one lowercase
(?=.*[A-Z])         # At least one uppercase
(?=.*\d)            # At least one digit
(?=.*[@$!%*?&])     # At least one special char
.{8,}               # At least 8 characters

Combined:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Last updated: January 2026
Advertisement