Skip to content

Regex lookahead and lookbehind assertions

We can think of the lookahead and lookbehind assertions as follows:

Lookahead and lookbehind syntax

NameSyntaxDescription
Positive lookahead(?=foo)Asserts that the current position is immediately followed by the string foo.
Negative lookahead(?!foo)Asserts that the current position is not immediately followed by the string foo.
Positive lookbehind(?<=foo)Asserts that the current position is immediately preceded by the string foo.
Negative lookbehind(?<!foo)Asserts that the current position is not immediately preceded by the string foo.

Examples

Positive lookahead (?=...)

const regex = /bar(?=foo)/
 
regex.test('barfoo') // true
regex.test('barbaz') // false
 
'barfoo'.match(regex) // ['bar']

Negative lookahead (?!...)

const regex = /bar(?!foo)/
 
regex.test('barfoo') // false
regex.test('barbaz') // true

Positive lookbehind (?<=...)

const regex = /(?<=foo)bar/
 
regex.test('foobar') // true
regex.test('bazbar') // false
 
'foobar'.match(regex) // ['bar']

Negative lookbehind (?<!...)

const regex = /(?<!foo)bar/
 
regex.test('foobar') // false
regex.test('bazbar') // true