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

How do you extract numbers which do not match some pattern?

本文关键字:模式 不匹配 数字 何提取 提取      更新时间:2023-09-26

>我需要提取长度超过 3 位的数字,并且不包括给定范围内的年份(例如,在 19xx2020 之间,其中 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);

为什么此表达式与日期的结尾不匹配?

它丢弃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。

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