Javascript Regex даты до 1 января 1970 года - PullRequest
0 голосов
/ 14 мая 2018

У меня есть этот Рег. Выражение

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

, который я использую, чтобы найти даты, подобные этому примеру

/Date(2208988800000+0100)/ 

По той причине, что я не могу понять, когда у меня есть дата с отрицательным значением в миллисекундах (предыдущее 1 января 1970 года), регулярное выражение не работает.

 /Date(-2208988800000+0100)/ 

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Регулярное выражение ищет форму, и ваша форма прямо сейчас:

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

Вам не хватает знака минус:

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

? - это так называемыйквантификатор и означает 1 или 0 раз.

Дополнительная информация:

regex101.com - хорошая площадка для проверки вашего регулярного выражения в реальном времени,Используйте его и извлекайте выгоду из «краткого справочника» внизу.

0 голосов
/ 14 мая 2018

Ваше регулярное выражение говорит:

/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*\)\/$/)
0 голосов
/ 14 мая 2018

Проблема в том, что ваше регулярное выражение не учитывает знак минус на числе (даты до 1970 года имеют отрицательные значения времени, поскольку значения времени смещены в миллисекундах с 1 января 1970 года в полночь).Вам нужно добавить -? в начале:

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

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

Примечание: я думаю, что оба ваших \d* s хотят быть \d+ s.Требуется хотя бы одна цифра по обе стороны от + / -, разделяющая смещение часового пояса ...

Примечание для стороны 2: В [\+\-] никакой обратной косой черты фактически не требуется.+ не является особенным в [], а - является особенным только в [], когда это не в начале или в конце.

...