2014-12-18 3 views
0

Я пытаюсь сделать вызов кодирования на 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», тогда она даст мне действительный массив со всеми совпадениями. Но если я прокомментирую эту строку, то совпадения становятся нулевыми. Зачем? Это так странно.

+1

что вы ожидали? "0 720"? – Dinesh

+0

Да. Но сначала я хочу знать, почему массив совпадений действителен сначала, но затем одна строка позже равна нулю. – Ryan

+0

'matches' становится null где? Пройдите через свой код с помощью отладчика. Вы уверены, что правильно вырезали и вставляли свой код, и что он не говорит 'if (matches = null)'? –

ответ

3

Существует простой надзор в CountingMinutesI(). Вы собираетесь getMinutes дважды. Заменить

return getMinutes(minuteA) + " " + getMinutes(minuteB); 

С

return minuteA + " " + minuteB; 
1

В функции CountingMinutesI вы вызываете getMinutes() всего 4 раза, один для первого фрагмента, один для второго фрагмента, один с результатом первого вызова (0) и один с результатом второй вызов (720).

Эти два вторых вызова являются проблемой, они приводят к функции, которая пытается совместить регулярное выражение с «0» и «720» соответственно, ни одна из которых не будет работать.

Смежные вопросы