匹配不以某事开头的正则表达式

时间:2010-09-29 23:52:27

标签: regex

我已经看到了一些其他类似的问题,但我似乎无法让它发挥作用。我想要做的是在JavaScript匹配一个带有问题编号的字符串。我有一部分工作正常,但如果它以target='_blank'>开头,我不想匹配它。

这些应该匹配......

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

这些不应该......

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

到目前为止我所拥有的是

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

但它仍然与它不应该匹配的那些相匹配。

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:1)

试试这个:^(Issue(?: number| no)?[ #:]?[ #]?([0-9]+))(未经测试)

如果您正在尝试使用Regex解析HTML。请不要,请使用DOM

答案 1 :(得分:1)

当你应该使用负面看时,你正在使用负向前看。

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

请注意?<!而不是?!

答案 2 :(得分:0)

通过关于“不用正则表达式解析HTML”的常规演讲,...如果你使用的是jQuery,你可以做类似的事情

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

这可能“不会编译”,但这是一般的想法。

答案 3 :(得分:0)

谢谢你们,

我最终要做的是建议here,并反转字符串和我的正则表达式,并使用前瞻。

所以我的新正则表达式是

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

跛。