Я пытаюсь сделать вызов кодирования на Coderbyte. Я должен найти разницу в минутах между двумя введенными временами (например: «12:00 am-12:00pm»). Это мой код:JS регулярное совпадение возвращает
function getMinutes(str) {
var pattern = /(\d+)\:(\d+)([ap]m)/i;
var matches = str.toString().match(pattern);
**// return matches**
if (matches == null) {
return matches;
}
var hour = parseInt(matches[1]);
var minutes = parseInt(matches[2]);
var extra = (matches[3] == "am") ? 0 : 720;
if (hour == 12)
hour = 0;
return (hour * 60) + minutes + extra;
}
function CountingMinutesI(str) {
var chunks = str.split("-");
var minuteA = getMinutes(chunks[0]), minuteB = getMinutes(chunks[1]);
return getMinutes(minuteA) + " " + getMinutes(minuteB);
}
// keep this function call here
// to see how to enter arguments in JavaScript scroll down
CountingMinutesI(readline());
По какой-либо причине в getMinutes совпадение равно null, хотя его не должно быть. Если вы раскомментируете выделенную строку, в которой говорится «return matches», тогда она даст мне действительный массив со всеми совпадениями. Но если я прокомментирую эту строку, то совпадения становятся нулевыми. Зачем? Это так странно.
что вы ожидали? "0 720"? – Dinesh
Да. Но сначала я хочу знать, почему массив совпадений действителен сначала, но затем одна строка позже равна нулю. – Ryan
'matches' становится null где? Пройдите через свой код с помощью отладчика. Вы уверены, что правильно вырезали и вставляли свой код, и что он не говорит 'if (matches = null)'? –