正则表达式拆分可选组

时间:2018-08-18 22:25:47

标签: javascript regex

我尝试在JavaScript中设置一个正则表达式,该表达式可以接受12:13:14.15之类的字符串(最大),但是仅执行12:13时,它将拆分第一个匹配项(12)分为两场比赛。

我已经来过一段时间了,我不知道是什么原因造成的。

这是我正在使用的表达式:

^(\d+)?:?(\d+):(\d+).?(\d+)?$

根据我的尝试,应该这样设置:

  • (XX:)XX:XX(.XX),其中()是可选的。

正如我上面提到的,将整个内容填写完整,所有内容都进入各自的匹配中。但是如果忽略了第一个可选部分,则会导致将第一个匹配项拆分为两个匹配项。


例如:

完整字符串为54:13.15。它将54分成与5的一场比赛和与4的一场比赛。我想要做的是将541315分成几组。它应该按:.划分。

请记住,这个示例是没有的可选部分。包括可选部分,它将正确分割。

我还需要使用正则表达式,因为我需要限制它可以执行的拆分次数。我不希望它能够有多个.拆分或类似10 :拆分。

对此有任何帮助!

2 个答案:

答案 0 :(得分:2)

我认为您正在使这一过程变得比它需要的复杂。您可以匹配要分割的定界符。您无需捕获其余部分。例如:

let st = '54:13.15'
// split on : and .
console.log(st.split(/[:.]/))

st = '12:13:14.15'
console.log(st.split(/[:.]/))

st = '12:13:14'
console.log(st.split(/[:.]/))

答案 1 :(得分:1)

您可以使用正则表达式:

^(\d+)?:?(\d+)?:(\d+).?(\d+)?$

var timestamp = '12:13:14.15'
var re = /^(\d+)?:?(\d+)?:(\d+)\.?(\d+)?$/g

matches = re.exec(timestamp)
ms = matches[4]
console.log(ms)

var timestamp = '54:13.20'
var re = /^(\d+)?:?(\d+)?:(\d+)\.?(\d+)?$/g

matches = re.exec(timestamp)
ms = matches[4]
console.log(ms)