javascript正则表达于1970年1月1日之前的日期

时间:2018-05-14 15:15:04

标签: javascript regex date-format

我有这个Reg。表达

value.match(/^\/Date\(\d*[\+\-]?\d*\)\/$/))

我用来查找这个例子的日期

/Date(2208988800000+0100)/ 

由于我无法理解当我的日期为负值毫秒(1970年1月1日之前)时,正则表达式不起作用。

 /Date(-2208988800000+0100)/ 

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

问题是你的正则表达式不允许数字上的减号(1970年之前的日期具有负时间值,因为时间值是从1970年1月1日午夜起的以毫秒为单位的偏移)。您需要在开头添加-?

value.match(/^\/Date\(-?\d*[\+\-]?\d*\)\/$/))
// Here --------------^^



var value = "/Date(-2208988800000+0100)/";
console.log(value.match(/^\/Date\(-?\d*[\+\-]?\d*\)\/$/));




旁注:我认为您的\d*都想成为\d+。您希望+ / -两侧至少有一位数字分隔时区偏移...

附注2:在[\+\-]中,实际上不需要反斜杠。 + []内的-并不特殊,[]只有compile 'com.getkeepsafe.relinker:relinker:1.2.3'内的System.loadLibrary("myLibrary"); 不在开头或结尾时才会特殊。

答案 1 :(得分:1)

正则表达式查找表单,您的表单现在就是:

/
"Date" literally
(
zero or unlimited digets
a plus or minus character
zero or unlimited digets
closing brackets
/

你错过了减号:

^\/Date\(\-?\d+[\+\-]?\d+\)\/$

?是一个所谓的量词,意味着1或0次。

进一步阅读:

regex101.com是一个很好的实时测试你的正则表达式的游乐场。使用它并从"快速参考"中获益。在底部。

答案 2 :(得分:1)

你的正则表达式说:

/Date(            at the beginning followed by 
0 or more digits  followed by
+ or - sign       followed by
0 or more digits  followed by
)/                at the end

输入"/Date(-2208988800000+0100)/"匹配

/Date(            at the beginning followed by 
0 or more digits  followed by
+ or - sign       followed by
0 or more digits

但接下来的事情是“0100”前面的“+”。因此,比赛失败。

你想要的reg exp可能是

/^\/Date\([\+\-]*\d*[\+\-]?\d*\)\/$/)