javascript - 使用正则表达式解析 'min:sec' 字符串

标签 javascript regex

我正在尝试解析一个包含由 : 分隔的分钟和秒的字符串。分钟和秒都是可选的(但需要提供)。这是我期望从正则表达式中得到的内容:

'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/

相关文章:

javascript - 我在使用 PHP 从 Javascript 中提取值时遇到问题

javascript - Bootstrap Accordion - 一次一个事件类

javascript - onchange 函数需要时间来刷新页面

javascript - 使用远程源禁用 IFRAME 内的双击

javascript - Meteor:创建用于共享的 URL(目前使用 iron-router)

java - Java中以不同长度分割字符串

c# - 加拿大邮政编码验证

mysql - 如何将mysql语句转换为为值添加特定数字

java - 树结构的正则表达式?

javascript - 链接时定位 jQuery 中添加的元素?