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