
David Y.
—How can I write a regular expression to match lines not containing a specific word?
You can do this using a negative lookahead assertion. The PCRE regular expression below will match any line that does not contain the word “word”:
/^((?!word).)*$/gm
Here’s what it does:
/: Start regular expression.^: Match the beginning of a line.(: Start capture group 1.(?!word): Negative lookahead assertion. If “word” is found, discard the current match, otherwise continue evaluating the expression..: Match any character.): End capture group 1.*: Match 0 or more of capture group 1.$: Match the end of the line./: End regular expressiong: Global flag. Find all matches in the string, not just the first one.m: Multiline flag. Use ^ and $ to match the start and end of a line, rather than the start and end of the whole string.Notably, this expression will not match empty lines. If this behavior is desired, we can add the s (dotall) flag, which will make . match all characters including newlines:
/^((?!word).)*$/gms
If the s flag is not supported by your regex implementation, you can replace . with [\s\S] (\s matches whitespace characters, and \S matches everything except whitespace characters).
/^((?!word)[\s\S])*$/gm
Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.
SEE EPISODESConsidered “not bad” by 4 million developers and more than 100,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.
