Jerad Rutnam Jerad Rutnam - 4 months ago 9
Javascript Question

Regex Match a character which is not followed by another specific character in javascript?

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!

Answer

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)

(?<!%)>