Добавление нуля к неэтилированному нулевому регулярному выражению даты и времени - PullRequest
2 голосов
/ 10 апреля 2020

У меня есть следующая строка даты-времени 2020-5-1 1:2 Я использовал шаблон (\W)(\d{1}) для сопоставления любого di git с длиной 1, то есть ненулевой, 5,1,1,2. Эта демонстрация показывает, что шаблон удалось перехватить их в группе 2 для каждого матча.

Используя метод Javascript String replace, Я попытался включить Пример строки даты и времени будет 2020-05-01 01:02. В этот jsbin , который выполняет следующий фрагмент:

var txt = '2020-5-1 1:2'
var output = [];
output[0] = txt.replace(/(\W)(\d{1})/gi,'0$1');
output[1] = txt.replace(/(\W)(\d{1})/gi,'0$2');
console.log(output);
// The output: ["20200-0-0 0:", "202005010102"]

В записи первого вывода он выполняет непредвиденное поведение, вместо добавления 0 к совпадению, он заменяет его на 0! Как я мог решить эту проблему?

1 Ответ

3 голосов
/ 10 апреля 2020

Вы использовали только один заполнитель в шаблоне замены, но в шаблоне регулярных выражений вы использовали две подстроки с двумя группами захвата, поэтому одна потеряна.

Чтобы добавить 0 перед однозначными числами, вы можете используйте

txt.replace(/\b\d\b/g,'0$&')
txt.replace(/(^|\D)(\d)(?!\d)/g,'$10$2')
txt.replace(/(?<!\d)\d(?!\d)/g,'0$&')     // With the ECMAScript2018+

Здесь \b\d\b соответствует значению di git, которому не предшествует и не следует буква ASCII, di git или _. Подстановка: 0 и значение полного совпадения $&.

Начало строки (^|\D)(\d)(?!\d) для захвата паттерна строки или не-ди git символа в Группу 1, затем ди git попадает в группу 2. Затем (?!\d) проверяет, нет ли di git сразу справа. Подстановка: $10$2, значение группы 1, 0, а затем значение группы 2.

Шаблон (?<!\d)\d(?!\d) соответствует любому di git, не заключенному в другие цифры, и подстановка такая же, как в случае 1.

JS демо:

var txt = '2020-5-1 1:2';
console.log( txt.replace(/\b\d\b/g,'0$&') )
console.log( txt.replace(/(^|\D)(\d)(?!\d)/g,'$10$2') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...