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

标签 javascript regex

我需要提取长度超过 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);

为什么这个表达式不正确地匹配日期的结尾?

最佳答案

它会丢弃某些内容,然后尝试匹配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/

相关文章:

javascript - 如何使用 jQuery 在网页中交换两个图像(连续两次点击)?

javascript - 如何将动态 JS 文件传递​​到 PhantomJS

javascript - 同时下载多个文件

regex - 使用正则表达式查找拼写错误

用于将文件路径转换为包/命名空间的正则表达式

javascript - 使用 JavaScript 单击外部时如何关闭 native HTML 对话框?

javascript - 过滤不在另一个数组中的数组

java - 解析特定格式的字符串

java - 从数学方程中提取变量

regex - 使用 Perl 正则表达式重叠文本替换