JS正则表达式匹配返回null

时间:2014-12-18 03:05:28

标签: javascript regex

我试图对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中,匹配为空,即使它不应该是。如果取消注释"返回匹配"的粗体线,那么它将为我提供包含所有匹配的有效数组。但是如果我评论该行,那么匹配变为空。为什么?这太奇怪了。

2 个答案:

答案 0 :(得分:3)

CountingMinutesI()中存在简单的疏忽。你要去两次getMinutes。取代

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

使用

  return minuteA + " " + minuteB;

答案 1 :(得分:1)

CountingMinutesI函数中,你总共调用getMinutes() 4次,一次用于第一个块,一个用于第二个块,一个用于第一个调用的结果(0),和第二次调用的结果(720)。

那些后两个调用是问题,它们导致函数试图将正则表达式与#34; 0"和" 720"分别不会起作用。