Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 从分钟和小时或天和小时的字符串计算分钟_Javascript_Regex - Fatal编程技术网

Javascript 从分钟和小时或天和小时的字符串计算分钟

Javascript 从分钟和小时或天和小时的字符串计算分钟,javascript,regex,Javascript,Regex,我有一个函数,它需要一个小时和分钟或天和小时的字符串,并将其转换为分钟 calculate(s) { const matches = /(?:(\d+) hours?)? ?(?:(\d+) mins?)?/.exec(s); return Number(matches[1] || 0) * 60 + Number(matches[2] || 0); }; 如果输入是: console.log(calculate('1 hour 5 mins')); // 65 console

我有一个函数,它需要一个小时和分钟或天和小时的字符串,并将其转换为分钟

calculate(s) {
    const matches = /(?:(\d+) hours?)? ?(?:(\d+) mins?)?/.exec(s);
    return Number(matches[1] || 0) * 60 + Number(matches[2] || 0);
};
如果输入是:

console.log(calculate('1 hour 5 mins')); // 65
console.log(calculate('2 hours 1 min')); // 121
console.log(calculate('3 hours')); // 180
console.log(calculate('10 mins')); // 10
console.log(calculate('1 day 5 hours'));
console.log(calculate('2 days 15 hours'));
console.log(calculate('3 days 16 hours 32 mins'));
但是,如果输入是:

console.log(calculate('1 hour 5 mins')); // 65
console.log(calculate('2 hours 1 min')); // 121
console.log(calculate('3 hours')); // 180
console.log(calculate('10 mins')); // 10
console.log(calculate('1 day 5 hours'));
console.log(calculate('2 days 15 hours'));
console.log(calculate('3 days 16 hours 32 mins'));
只需使用相同的逻辑,将days部分添加到hours部分前面:

(?:(\d+) days? ?)?(?:(\d+) hours? ?)?(?:(\d+) mins?)?
在代码中,这将是:

函数计算数{
常量匹配=/(?:(\d+)天??)(?:(\d+)小时??)(?:(\d+)分钟?/.exec(s);
返回编号(匹配[1]| | 0)*24*60
+数量(匹配[2]| | 0)*60
+数字(匹配[3]| | 0);
};
console.log(calculateMinutes('1小时5分钟'));//65
console.log(calculateMinutes('2小时1分钟');//121
console.log(calculateMinutes('3小时'));//180
console.log(calculateMinutes('10分钟'));//10
console.log(calculateMinutes('1天5小时'));//1740
console.log(calculateMinutes('2天15小时');//3780
console.log(calculateMinutes('3天16小时32分钟');//5312
console.log(calculateMinutes('2小时'));//120
console.log(calculateMinutes('1天'));//1440

console.log(calculateMinutes('1天16小时'))解决方案适用于所有示例。如果您跳过了某些单位,例如
1天3分钟(无小时),或使单位无法正常工作,例如
5分钟10小时
,也会起作用

函数计算(时间){
//将字符串拆分为单词
let times=time.split(/\s+/);
让totalMinutes=0;
while(times.length>0){
//从成对的数字中获取数量
设数量=数量(times.shift());
//从数据对中获取测量单位
设单位=times.shift();
让乘法器;
如果(/day/.test(单位)){
//一天有60*24分钟
乘数=60*24;
}否则,如果(/hour/.test(单位)){
//一小时有60分钟
乘数=60;
}否则{//1分钟
//一分钟只有一分钟
乘数=1;
}
//加上总分钟数
总分钟数+=数量*倍增器;
}
返回总分钟数;
}
console.log(计算('1小时5分钟');//65
console.log(计算('2小时1分钟');//121
console.log(计算('3小时');//180
console.log(计算('10分钟');//10
console.log(计算('1天5小时');//1740
console.log(计算('2天15小时');//3780
console.log(计算('3天16小时32分钟');//5312
console.log(计算('2小时');//120

console.log(计算('1天');//1440
代码将字符串拆分为单词,然后希望列表只包含成对的
(数量、单位)
。然后将每个
(数量*分钟对应于单位)
相加到总数中。