我正试图在1900年之间找到一个有效的年份,现在用这样的字符串: 5050.2011.DVD.XviD.AVI.117715.imported
我正在寻找未被其他数字包围的4位数字,以19或20开头。
到目前为止,这就是我所拥有的,但表达式返回2011,20。
/(?!=\d)(19|20)[0-9][0-9](?!\d)/
我该如何解决这个问题?
答案 0 :(得分:1)
使用split>>
s.split(/[^\d]/).filter(function(n){if((n>=1900)&&(n<=2099))return n})
答案 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']
或使用match
和filter
:
'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']