True if a grouped expression is not ahead of the current position.
Reject overall match if a group expression matches.
Group is not included in the match or captured.
Negative Lookahead Metacharacter is:
?! Group is a negative lookahead assertion.
? modifies the group.
! makes the group into a negative lookahead assertion.
An example is /(?!seashore)sea/ matches “sea” in “seaside” but not “seashore”.
A second example is /\b(?!re)\w+\b/ matches words not starting in “re”.
It matches “cycle”, but not “recycle”.
A third example is /\b\w+(?!er)\b/ matches words not ending in “er”.
It matches “run” and “running”, but not “runner”.
Not merely the opposite of positive lookahead assertions.
This rejects whole expressions, not just simple character matches.
Can find “sales tax” instead of “sales” for example .
A fourth example is “The green frog chased the green bug in the green grass.” We can use a word boundary such as /\bgreen\b/, which finds all the words of “green”.
To miss out the “green” before “frog” and capture the other words, we use /\bgreen\b(?! frog)/, which captures the “green” before “bug” and the “green” before “grass”.
To find only the last instance of “green”, which is “green” before “grass”, we can use /\bgreen\b(?!.*green)/
Do not match lines that begin with a code comment indicate #.
We can do this with negative lookahead assertion, which is /^(?!\s*#).+$/