RegEx для извлечения даты из времени
У меня есть следующие дата и время, и я хочу преобразовать их в простую цифру, используя RegEx
Что у меня есть: 2017-11-02T04:00:00Z
Что я хочу преобразовать в: 20171102 (включая ведущие нули месяцев / дат)
Это возможно с RegEx? Был в состоянии получить "2017-" только после нескольких часов работы, используя "^(.*?)-"
Кажется все сложнее, любая рука помощи очень ценится
Изменить: показывая, где я пытаюсь это. Я пытаюсь сделать это на Nintex для SharePoint. Но до этого я использую www.regEx101.com для проверки
3 ответа
Используйте следующее регулярное выражение с шаблоном замены:
^(\d{4})-(\d{2})-(\d{2}).*
и предоставить
$1$2$3
в качестве шаблона замены.
подробности
^
- начало строки(\d{4})
- Группа 1 (позже упоминается как$1
обратная ссылка из шаблона замены): четыре цифры-
- дефис(\d{2})
- Группа 1 (позже упоминается как$2
обратная ссылка из шаблона замены): две цифры-
- дефис(\d{2})
- Группа 3 (позже упоминается как$3
обратная ссылка из шаблона замены): две цифры.*
- остальная часть строки.
Смотрите демо-версию регулярного выражения.
Как насчет ^\d{4}-\d{2}-\d{2}
?
Это будет соответствовать ровно четырем цифрам, за которыми следует дефис, за которыми следуют 2 цифры, за которыми следует еще один дефис, за которым следуют еще две цифры.
var str = "2017-11-02T04:00:00Z";
var res = str.match(/^\d{4}-\d{2}-\d{2}/)[0];
console.log(res);
Невозможно исключить символы из группы совпадений в регулярном выражении, поэтому вы должны использовать три группы совпадений. Я использую командную строку sed, чтобы экспериментировать с регулярными выражениями. Вот некоторые результаты, чтобы показать, что я имею в виду:
$ echo '2017-11-02T04:00:00Z'|sed 's/^\([0-9]*\)-\([0-9]*\)-\([0-9]*\)T.*$/\1\2\3/'
20171102
Эта команда сопоставляет каждую последовательность произвольной длины чисел в отдельной группе захвата, а затем заменяет всю строку тремя группами. То, как ваш язык реализует эту функцию, будет отличаться.