我需要提取长度超过 3 位且不包含给定范围内年份的数字(例如 19xx
和 2020
之间,其中 XX
始终位于字符串的末尾)。
我目前使用以下模式:
/(?!19[0-9]{2}|200[0-9]|201[0-9]|202[0-9])\d{3,}$/i
当我使用“something 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);
为什么这个表达式不正确地匹配日期的结尾?
最佳答案
它会丢弃某些内容
,然后尝试匹配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 .
关于javascript - 如何提取与某些模式不匹配的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213738/