Tjeerd Kramer
Tjeerd Kramer

Reputation: 223

Regular expression negative match

I can't seem to figure out how to compose a regular expression (used in Javascript) that does the following:

Match all strings where the characters after the 4th character do not contain "GP".

Some example strings:

I'd love some help here...

Upvotes: 9

Views: 11006

Answers (3)

FailedDev
FailedDev

Reputation: 26940

Use zero-width assertions:

if (subject.match(/^.{4}(?!.*GP)/)) {
    // Successful match
}

Explanation:

"
^        # Assert position at the beginning of the string
.        # Match any single character that is not a line break character
   {4}   # Exactly 4 times
(?!      # Assert that it is impossible to match the regex below starting at this position (negative lookahead)
   .     # Match any single character that is not a line break character
      *  # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   GP    # Match the characters “GP” literally
)
"

Upvotes: 12

Joseph Marikle
Joseph Marikle

Reputation: 78590

could do something like this:

var str = "EDARDTGPRI";
var test = !(/GP/.test(str.substr(4)));

test will return true for matches and false for non.

Upvotes: 2

Dan
Dan

Reputation: 10786

You can use what's called a negative lookahead assertion here. It looks into the string ahead of the location and matches only if the pattern contained is /not/ found. Here is an example regular expression:

/^.{4}(?!.*GP)/

This matches only if, after the first four characters, the string GP is not found.

Upvotes: 7

Related Questions