2016-11-04 2 views
1

В JavaScript, у меня есть Строка времени var time = "12:30:49PM"Как Regex расщепляющу- строки времени

Я хочу, чтобы отделить час, мин, сек и AM/PM от этой строки.

Просмотр stackoverflow Я смог найти следующее регулярное выражение, которое разделяет час, мин и Am/pm, но мне очень плохо в regex, поэтому я не могу разобраться, как это сделать.

var hours = Number(time.match(/^(\d+)/)[1]); 
var minutes = Number(time.match(/:(\d+)/)[1]); 
var AMPM = time.match(/([AaPp][Mm])$/)[1]; 

как получить второе с помощью регулярных выражений

ответ

3

В вашем примере, вы бы просто сделать что-то вроде:

var time = "12:30:49PM"; 
 
var hours = Number(time.match(/^(\d+)/)[1]); 
 
var minutes = Number(time.match(/:(\d+)/)[1]); 
 
var AMPM = time.match(/([AaPp][Mm])$/)[1]; 
 
var seconds = Number(time.match(/:(\d+):(\d+)/)[2]); 
 
console.log(hours, ":", minutes, ":", seconds, AMPM);

Однако, это было бы более эффективно, чтобы получить все в одном вызове:

var time = "12:30:49AM"; 
 
var matches = time.match(/^(\d+):(\d+):(\d+)([AP]M)$/i); 
 
var hours = matches[1]; 
 
var minutes = matches[2]; 
 
var seconds = matches[3]; 
 
var AMPM = matches[4]; 
 
console.log(hours, ":", minutes, ":", seconds, AMPM);

5

Вы можете использовать комбинацию регулярных выражений с ES6 массива деструктуризации:

const time = "12:30:49PM" 
 
const [hour, min, sec, period] = time.match(/\d+|\w+/g); 
 

 
console.log(hour, min, sec, period);

+0

Это Nive путь :) –

+0

Это прекрасно! – Jackthomson

+0

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

1

Вы можете использовать его следующим образом:

var time = "12:30:49PM" 
 
var hours = Number(time.match(/^(\d+)/)[1]); 
 
var minutes = Number(time.match(/:(\d+)/)[1]); 
 
var sec = Number(time.match(/:(\d+)\D+$/)[1]); 
 
var AMPM = time.match(/([ap]m)$/i)[1]; 
 
console.log(hours); 
 
console.log(minutes); 
 
console.log(sec); 
 
console.log(AMPM);

1

Просто разделить на толстой кишке и (P \ A) M часть

var time = "12:30:49PM"; 
 
var parts = time.split(/:|(\DM)/).filter(Boolean); 
 

 
console.log(parts)

0
var sec = Number(time.match(/:([0-9][0-9])/ig)[1].replace(":","")) 
Смежные вопросы