我有这个字符串:
var case1 = '5.25 - 12.25, 13 - 18.5';
var case2 = '6.5 - 12, 13 - 18.5';
var case3 = '9 - 13, 14 - 18';
我需要将它们转换为:
result1; //05:15 - 12:15, 13:00 - 18:30;
result2; //06:30 - 12:00, 13:00 - 18:30;
result3; //09:00 - 13:00, 14:00 - 18:00;
是否可以只使用正则表达式?
规则:
1) 如果数量小于10,则添加前导0。
2) 将 .25
替换为 :15
,将 .5
替换为 :30
3) 如果该点后面没有任何内容,请添加 00
我尝试用条件、替换等来做到这一点,但一团糟。
最佳答案
您可以使用一个正则表达式,但使用replace
回调函数:
const cases = [
'5.25 - 12.25, 13 - 18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'
];
const result = cases.map( c => c.replace(/(\d+)(\.\d+)?/g, (_, h, m) =>
('0'+h).substr(-2) + ':' + ('0' + (Math.floor(m*60) || 0)).substr(-2)
));
console.log(result);
ES5 语法:
var cases = [
'5.25 - 12.25, 13 - 18.5',
'6.5 - 12, 13 - 18.5',
'9 - 13, 14 - 18'
];
var result = cases.map(function (c) {
return c.replace(/(\d+)(\.\d+)?/g, function (_, h, m) {
return ('0'+h).substr(-2) + ':' + ('0' + (Math.floor(m*60) || 0)).substr(-2);
});
});
console.log(result);
关于javascript - 将值转换为可读的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434267/