Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS正则表达式匹配返回null_Javascript_Regex - Fatal编程技术网

Javascript JS正则表达式匹配返回null

Javascript JS正则表达式匹配返回null,javascript,regex,Javascript,Regex,我正在尝试对Coderbyte进行编码挑战。我必须找出两个输入时间(例如:“12:00am-12:00pm”)之间的分钟差。这是我的代码: function getMinutes(str) { var pattern = /(\d+)\:(\d+)([ap]m)/i; var matches = str.toString().match(pattern); **// return matches** if (matches == null) { return matche

我正在尝试对Coderbyte进行编码挑战。我必须找出两个输入时间(例如:“12:00am-12:00pm”)之间的分钟差。这是我的代码:

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,即使它不应该为null。如果您取消注释粗体的行“returnmatches”,那么它将为我提供包含所有匹配项的有效数组。但如果我将该行注释掉,则匹配项将变为null。为什么?这太奇怪了

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


这两个调用是问题所在,它们导致函数分别尝试将正则表达式与“0”和“720”匹配,这两个都不起作用。

CountingMinutesI
函数中,您总共调用了
getMinutes()
4次,第一次调用一次,第二次调用一次,一个具有第一次调用的结果(0),另一个具有第二次调用的结果(720)


这两个调用是问题所在,它们导致函数分别尝试将正则表达式与“0”和“720”匹配,这两个函数都不起作用。

CountingMinutesI()中存在简单的疏忽。你将得到两次分钟。替换

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


在计算分钟数时有一个简单的疏忽。你将得到两次分钟。替换

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


你在期待什么?“0720”?是的。但是首先我想知道为什么matches数组一开始是有效的,但是一行之后它是空的。
matches
在哪里变成空的?使用调试器逐步完成代码。你确定你已经正确地剪切和粘贴了你的代码,并且它没有说如果(matches=null)?你期待什么?“0720”?是的。但是首先我想知道为什么matches数组一开始是有效的,但是一行之后它是空的。
matches
在哪里变成空的?使用调试器逐步完成代码。你确定你已经正确地剪切和粘贴了你的代码,并且它没有说如果(matches=null)?