Jerad Rutnam
Jerad Rutnam

Reputation: 1546

Regex Match a character which is not followed by another specific character

I'm writing a CodeMirror extension for Brackets. To defineSimpleCodeMode I need to do some pattern matching and I'm trying to figure out how to achieve $subject.

e.g.

Match < of all the html tags

<body>

And ignore html tags which are followed by <%

<% if %> 

Note: I only want to get the starting < of it

If some can help me out it would be a great help. Please do let me know if you need anymore details.

Thanks!

Upvotes: 5

Views: 6246

Answers (1)

Azaghal
Azaghal

Reputation: 430

While this seems to be a bad idea, I can see two ways of doing it :

1. Searching for < followed by anything but the % character, then ignoring it

(<)(?:[^%])

The [^] sequence allows you to search for anything but the following character.

The (?:) sequence is for non capturing groups.

2. (Better, if supported) Searching for input not followed by % with a negative lookahead

<(?!%)

The (?!) sequence succeeds if it doesn't match the following character, but is not captured.

If you also want to do it for %>, you can just "reverse" the first option :

(?:[^%])(>)

Or you need a negative lookbehind :

(careful here, the lookahead won't work as you need to go backwards)

(?<!%)>

Upvotes: 14

Related Questions