正则表达式用数字字符串查找年份

时间:2012-10-05 14:51:28

标签: javascript regex

我正试图在1900年之间找到一个有效的年份,现在用这样的字符串: 5050.2011.DVD.XviD.AVI.117715.imported

我正在寻找未被其他数字包围的4位数字,以19或20开头。

到目前为止,这就是我所拥有的,但表达式返回2011,20。

/(?!=\d)(19|20)[0-9][0-9](?!\d)/

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用split>>

s.split(/[^\d]/).filter(function(n){if((n>=1900)&&(n<=2099))return n})​

检查this demo

答案 1 :(得分:0)

这个正则表达式将在1900-2099年之间回归。

[^0-9](19|20)[0-9]{2}[^0-9]

现在,对上面返回的结果运行另一个正则表达式:

(19|20)[0-9]{2}

为了向您解释发生了什么,首先使用正则表达式清除所有不需要的字符,然后返回类似.2012.的字符串。

第二个正则表达式从.2012.中提取年份并返回2012


但如果你想要具体,每10年,你就必须自己更新正则表达式:

[^0-9]((19[0-9]{2})|(20[0-1][0-9]))[^0-9]

查看正则表达式中的第二个[0-1]?这是你必须每10年更新一次到当前年份的倒数第二位。

例如, 如果它是2023年,您将其更新为:[0-2][0-9]

答案 2 :(得分:0)

或者,您可以在此处使用Array.filter

'5050.2011.DVD1943.XviD.AVI+117715.imported'
 .split(/[^\d]/ /* or /\D/ */)
 .filter(function(a){return +a>1899 && +a<=(new Date).getFullYear();});
 //=> ['2011','1943']

或使用matchfilter

'5050.2011.DVD1943.XviD.AVI+117715.imported'
 .match(/[^\D]+/g /* or /\d+/g */)
 .filter(function(a){return +a>1899 && +a<=(new Date).getFullYear();});
 //=> ['2011','1943']