我需要提取超过3位数的数字,并且不包括给定范围内的年份(例如,在19xx
和2020
之间,其中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);
为什么此表达式与日期结束错误匹配?
答案 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))