通常有一些神奇的方法可以在javascript中执行某些操作。
以字符串
为例 10h49m02s
并希望将其转换为
10 hours, 49 minutes, 2 seconds
同时避免空闲时间/分钟/秒
EG2
00h10m20s
这就是我正在做的,这可能是搞笑的
var arr = time.split('');
var hourMaj = arr[0];
var hourMin = arr[1];
var minMaj = arr[3];
var minMin = arr[4];
var secMaj = arr[6];
var secMin = arr[7];
var str = "";
if(hourMaj !== '0'){
str += hourMaj;
str += hourMin;
}else if (hourMin !== '0'){
str += hourMin;
}
if(hourMaj !== '0' || hourMin !== '0')
str += "hours, ";
... and on
答案 0 :(得分:2)
您实际上可以使用正则表达式来匹配您的值,并且只有当捕获的文本不是零时才用展开的单词替换h
,m
和s
,如下所示:
var re = /\b0*(\d{1,2})h0*(\d{1,2})m0*(\d{1,2})s\b/g;
var str = '10h49m02s';
var str2 = '00h10m20s';
function func(match, h, m, s) {
var p = '';
if (h !== '0') {
p += h + " hours"
}
if (m !== '0') {
p += (p.length > 0 ? ", " : "") + m + " minutes"
}
if (s !== '0') {
p += (p.length > 0 ? ", " : "") + s + " seconds"
}
return p;
}
var res = str.replace(re, func);
document.write(res + "<br/>");
res = str2.replace(re, func);
document.write(res);
&#13;
正则表达式 - \b0*(\d{1,2})h0*(\d{1,2})m0*(\d{1,2})s\b
- 匹配:
\b
- 字边界0*
- 0个或更多前导零(\d{1,2})
- 小时,1或2位数字h0*
- h
字面上和0或更多零(\d{1,2})
- 分钟,1或2位数字m0*
- m
字面上和0或更多零(\d{1,2})
- 秒,1或2位数s\b
- s
在&#34;字的末尾&#34;。答案 1 :(得分:2)
与stribizhev的答案类似,但是使用更简单的正则表达式。我已经使用 reduce ,但for循环不再是代码,可能会更快:
function parseTime(s) {
// Match sequences of numbers or letters
var b = s.match(/\d+|[a-z]+/gi);
var words = {h:'hour', m:'minute', s:'second'};
var result;
// If some matches found
if (b) {
// Do replacement
result = b.reduce(function(acc, p, i) {
// Only include values that aren't zero
// and skip letters - +p => NaN
if (+p) {
// Change letters to words, add plural and store in array
acc.push(+p + words[b[i+1]] + (p==1? '' : 's'));
}
// Pass the accumulator array to the next iteration
return acc;
},[])
}
// Format the result
return result.join(', ');
}
document.write(parseTime('00h00m02s') + '<br>');
document.write(parseTime('10h40m02s') + '<br>');
document.write(parseTime('10h00m51s') + '<br>');
document.write(parseTime('01h32m01s'));
&#13;