Javascript JS正则表达式匹配返回null
我正在尝试对Coderbyte进行编码挑战。我必须找出两个输入时间(例如:“12:00am-12:00pm”)之间的分钟差。这是我的代码: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
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)?