正则表达式找到大于或等于2014年

时间:2014-07-29 17:38:59

标签: javascript regex

我想使用正则表达式找到大于或等于2014的年份(4位数字)。 [2014 - 9999]

我已尝试过此功能,但如果最后一位数小于4,则不匹配。

^[2-9]\d{1,}[1-9]0*[4-9]0*$

例如:3013

请帮帮我。

4 个答案:

答案 0 :(得分:3)

请尝试使用以下正则表达式来匹配2014年至9999年的年份,

^(?:20(?:1[4-9]|[2-9][0-9])|2[1-9][0-9][0-9]|[3-9][0-9][0-9][0-9])$

DEMO

<强>解释

  • 20(?:1[4-9]|[2-9][0-9])符合2014年至2099年的年份。
  • 2[1-9][0-9][0-9]符合2100年至2999年的年份。
  • [3-9][0-9][0-9][0-9]匹配从3000到9999的年份。

答案 1 :(得分:1)

显然,正则表达式是一种可怕的方法,所以我假设你这样做是作为一种心理锻炼,或作为家庭作业。无论哪种方式 - 像大多数编程问题一样,你可以通过将其分解为更小,更易于管理的块来解决这个问题:

(这可能不是最酷的解决方案,但很容易理解)

  1. 匹配任何数字与5位或更多位数(&gt; = 10000)(问题描述不是严格要求,但......)
  2. 匹配表格[3-9] xxx(3000-9999)
  3. 的任何4位数字
  4. 匹配表格2 [1-9] xx(2100-2999)
  5. 的任何4位数字
  6. 匹配表格20 [2-9] x(2020-2099)
  7. 的任何4位数字
  8. 匹配201 [4-9](2015-2019)
  9. 表格的任何4位数字
  10. 获取您为步骤0-4创建的正则表达式并将它们组合在一起,以便匹配任何这些模式。
  11. (参见Avinash Raj的答案,对于这样做的实际正则表达式)

答案 2 :(得分:1)

^[3-9]\d{3}|(2(0(1[4-9]|[2-9]\d)|[1-9]\d{2}))$

pass

2014 
2015
3014
3000
9999
5014

fail

2013
0014
2012
1013

答案 3 :(得分:-1)

((?:20(?:(?:1[4-9])|(?:[2-9]\d)))|(?:2[1-9]\d\d)|(?:[3-9]\d\d\d))

正是您要找的。额外的周围括号是启用明确捕获或反向引用。