我有一个字符串,可以采用以下格式(数字是示例):
2h34m2s
23m6s
7h8s
4h2m
3h
2m
2s
我本来打算使用split()
与正则表达式匹配h
,m
和s
。但是,如果只有一些指标存在(如果它的形式为2m3s
,则会失败,那么我需要一种方法来知道数组中的第一个条目代表分钟而不是小时)。
我认为正确的解决方案会涉及某种类型的正则表达式,但它当前逃脱了我。有关清洁高效解决方案的任何想法吗?
编辑:
(我想接受任意数字的数字,所以我没有在正则表达式中使用{1,2}
。
var timeString = $('#interval').val();
var hours = timeString.match('/\d+(?=h)/')[0]; // 2h4m8s
var minutes = timeString.match('/\d+(?=m)/')[0];
var seconds = timeString.match('/\d+(?=s)/')[0];
console.log('hours: ' + hours);
console.log('minutes: ' + minutes);
console.log('seconds: ' + seconds);
控制台正在为值null
提供。
答案 0 :(得分:2)
您可以使用以下正则表达式:
\d+(?=m)
分钟,
\d+(?=h)
几个小时,
\d+(?=s)
秒。
你应该做一个不区分大小写的匹配。
答案 1 :(得分:2)
var string = "23h4m"
var regexp = /(\d+h)?(\d+m)?(\d+s)?/;
var result = string.match(regexp) // gives you ["23h4m", "23h", "4m", undefined]
您可以使用result[1]
小时,result[2]
分钟和result[3]
秒来访问结果。如果没有给出,则值是未定义的。
答案 2 :(得分:1)
你可以在这里使用正向前瞻的正则表达式:
/\d{1,2}(?=h)/
匹配小时:后跟字母h
的一位或两位数。类似于m
和s
。
答案 3 :(得分:1)
//match any digits and include the letters
var rx=/((\d+)(h|m|s))/g;
//test:
var str1='2h34m2s',str2='23m6s';
str1+'=\n\t'+str1.match(rx).join(':\n\t')+'\n'+
str2+'=\n\t'+str2.match(rx).join(':\n\t')
//returns
2h34m2s=
2h:
34m:
2s
23m6s=
23m:
6s