tags:

views:

43

answers:

4

I have seen a few other similar questions, but I can't seem to get it to work. What I am trying to do is in JavaScript match a string with issue numbers. I have that part working fine, but I don't want to match it if it starts with target='_blank'>.

These should match...

Issue# 123  
Issue #123  
Issue 123  
Issue no 123  
Issue number 123  
Issue: 123  

These should not...

target='_blank'>Issue# 123  
target='_blank'>Issue #123  
target='_blank'>Issue 123  
target='_blank'>Issue no 123  
target='_blank'>Issue number 123  
target='_blank'>Issue: 123

What I have so far is

(?!target='_blank'>)(issue(?: number| no)?[ #:]?[ #]?([0-9]+))

But it is still matching the ones it shouldn't.

Any help would be great.

A: 

Glossing over the usual speech about "don't parse HTML with regexes",... if you're using jQuery, you could do something like

$("a[target!='_blank']").each(function() {
    if(/yourregex/.match($(this).text()) {
        // do whatever
    }
});

That probably "won't compile", but that's the general idea.

Mark
A: 

Try this: ^(Issue(?: number| no)?[ #:]?[ #]?([0-9]+)) (Untested)

If you're trying to parse HTML with Regex. Please don't, instead.. Use DOM

Ruel
A: 

You're using negative look ahead when you should be using negative look behind.

(?<!target='_blank'>)(issue(?: number| no)?[ #:]?[ #]?([0-9]+))

Note the ?<! instead of ?!.

Dingo
That works, except not in JavaScript :(
Metallic Cloud
A: 

Thanks guys,

What I've ended up having to do is as suggested here, and reverse the string and my regex, and use look ahead.

So my new regex is

(([0-9]+)[ #]?[ #:]?(?:rebmun |on )?eussi)(?!>'knalb_'=tegrat)

lame.

Metallic Cloud