我有这个Reg。表达
value.match(/^\/Date\(\d*[\+\-]?\d*\)\/$/))
我用来查找这个例子的日期
/Date(2208988800000+0100)/
由于我无法理解当我的日期为负值毫秒(1970年1月1日之前)时,正则表达式不起作用。
/Date(-2208988800000+0100)/
有什么建议吗?
答案 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*\)\/$/)