我试图对Coderbyte进行编码挑战。我必须找到两个输入时间之间的分钟差异(例如:" 12:00 am-12:00 pm")。这是我的代码:
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中,匹配为空,即使它不应该是。如果取消注释"返回匹配"的粗体线,那么它将为我提供包含所有匹配的有效数组。但是如果我评论该行,那么匹配变为空。为什么?这太奇怪了。
答案 0 :(得分:3)
CountingMinutesI()中存在简单的疏忽。你要去两次getMinutes。取代
return getMinutes(minuteA) + " " + getMinutes(minuteB);
使用
return minuteA + " " + minuteB;
答案 1 :(得分:1)
在CountingMinutesI
函数中,你总共调用getMinutes()
4次,一次用于第一个块,一个用于第二个块,一个用于第一个调用的结果(0),和第二次调用的结果(720)。
那些后两个调用是问题,它们导致函数试图将正则表达式与#34; 0"和" 720"分别不会起作用。