我有一个表示持续时间的字符串。 它可以像下列之一:
10d12h59m
10d12h
10D
12小时
70
在“d”之前的数字代表天数,“h”之前的数字代表小时,“m”之前的数字代表分钟,如果它的正数则表示分钟数。
我想要一个匹配该字符串的javascript正则表达式。
答案 0 :(得分:1)
如果您只想检查它是否匹配:/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/
的示例:
"10d12h59m".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d12h59m"]
"10d12h".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d12h"]
"10d".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d"]
"12h".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["12h"]
"70".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); //Array ["70"]
"foobar".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // null
"10d50m".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // null
答案 1 :(得分:0)
试试这个:
/(\d\d[dhm]?){1,3}/
这将匹配您的所有示例。
工作原理:
# \d\d - Match 2 digits
# [dhm]? - followed by a optional d, h, or m.
# {1,3} - and make sure there's 1, 2 or 3 of the previous.
如果您还想传递一位数字或99以上的数字,请使用此正则表达式:
/(\d+[dhm]?){1,3}/
// ^ Note the added +, instead of \d
答案 2 :(得分:0)
使用此正则表达式(\d+[dmh]?)+
答案 3 :(得分:0)
试试这个:
/(\d+d)?(\d+h)?(\d+m?)?/
在每个匹配的群组中,您可以轻松应用parseInt(…, 10)
。
答案 4 :(得分:0)
将字符串解析为小时,天和分钟:
function parseDuration(s) {
var m = /(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m?)?/.exec(s);
return {
days: parseInt(m[1], 10) || 0,
hours: parseInt(m[2], 10) || 0,
minutes: parseInt(m[3], 10) || 0
};
}
演示:http://jsfiddle.net/Guffa/9hj5F/
要验证字符串,您可以使用具有三种不同变体的模式(dhm,dh和d都可以是相同的变体,带有可选部分)进行基本验证,例如:^(\d+d(\dh(\d+m)?)?|\d+h|\d+m?)$
。
如果您还要限制值,您可以使用[0-5]?\d
代替\d+
将值限制为0到59,或[0-5]\d
要求两位数即00-59。