如何提取与某些模式不匹配的数字?

时间:2012-06-26 18:29:33

标签: javascript regex

我需要提取超过3位数的数字,并且不包括给定范围内的年份(例如,在19xx2020之间,其中XX总是在最后字符串)。

我目前正在使用以下模式:

/(?!19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\d{3,}$/i

当我使用“某事2012”测试表达式时,我总是得到结果012。我需要null

var s = "moose high performance drive belt 2012";
s.match(/(?!19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\d{3,}$/i);

为什么此表达式与日期结束错误匹配?

2 个答案:

答案 0 :(得分:2)

它会丢弃something ,然后尝试匹配2012但由于您的负面预测断言而失败,然后尝试匹配012成功因为确实,012与你的负前瞻断言不匹配。

<强>更新

这不是很好,但它是一个解决方案。也许你可以简化它。

    (?!(?:19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\D)(?<!\d)\d{3,}

在此处查看演示:http://rubular.com/r/FLiehrUEp8

答案 1 :(得分:1)

多年 1900 - 2029 应该是正则表达式 \b(\d+)\b(?<!(?:19\d{2}|20[0-2]\d))