javascript 正则表达式日期早于 1970 年 1 月 1 日

javascript Regex dates before 1st jan 1970

我有这个注册。表达式

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

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

/Date(2208988800000+0100)/ 

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

 /Date(-2208988800000+0100)/ 

有什么建议吗?

问题是您的正则表达式不允许在数字上使用减号(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:在 [\+\-] 中,实际上不需要反斜杠。 +[] 中并不特殊,而 - 仅在 [] 中不在开头或结尾时才特殊。

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

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

您漏掉了减号:

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

? 是所谓的量词,表示 1 次或 0 次。

进一步阅读:

regex101.com 是一个很好的实时测试正则表达式的游乐场。使用它并从底部的"quick reference"中获利。

您的正则表达式表示:

/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*\)\/$/)