我正在尝试解析一个包含由 :
分隔的分钟和秒的字符串。分钟和秒都是可选的(但需要提供)。这是我期望从正则表达式中得到的内容:
'0' // => '', '0'
'30' // => '', '30'
':30' // => '', '30'
'1:' // => '1', ''
'1:30' // => '1', '30'
不需要获取空字符串,它将使用 parseInt(value, 10) || 进行解析0
之后,所以它可能是 0
、''
、undefined
、...
我尝试了这个正则表达式:
^([0-9]+)?:?([0-9]+)?$
但是当只有一个值并且没有分隔符时,它被视为一分钟:
'0' // => '0', '' <= wrong result
'30' // => '30', '' <= wrong result
':30' // => '', '30'
'1:' // => '1', ''
'1:30' // => '1', '30'
您可以看到test case here .
有什么想法吗?
<小时/>编辑: 我当前的实现(没有正则表达式)如下所示:
var min, parts, sec, bp;
bp = '1:30';
parts = bp.split(':');
if (parts.length === 2) {
min = parts[0];
sec = parts[1];
} else {
min = 0;
sec = parts[0];
}
最佳答案
不要将第二组设置为可选,将冒号包装在非捕获组中并设置该选项并将 + 替换为 * ^(?:([0-9]*):)?([0-9 ]*)$
关于javascript - 使用正则表达式解析 'min:sec' 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093910/