Javascript JS Regex多个捕获组返回所有匹配项

Javascript JS Regex多个捕获组返回所有匹配项,javascript,regex,Javascript,Regex,我试图创建一个正则表达式来从字符串中提取数据。我的示例字符串:dn1:pts-sc1.1。我期望的数据格式:['pts',sc',1.1']所以基本上是后面的每一组字母:和结尾的数字 我所说: /^[^:::+:(?:([a-z]+)-?)+([\d\.]+)$/g 不幸的是,它只返回最后一组字母。 ['sc',1.1'] 我还尝试将+添加到第一个捕获组: /^[^:::+:(?:([a-z]+)+-?)+([\d\.]+)$/g 结果是一样的。唯一不同的是regex101给了我这样的评论: 重

我试图创建一个正则表达式来从字符串中提取数据。我的示例字符串:
dn1:pts-sc1.1
。我期望的数据格式:
['pts',sc',1.1']
所以基本上是
后面的每一组字母:
和结尾的数字

我所说:

/^[^:::+:(?:([a-z]+)-?)+([\d\.]+)$/g

不幸的是,它只返回最后一组字母。
['sc',1.1']

我还尝试将
+
添加到第一个捕获组:

/^[^:::+:(?:([a-z]+)+-?)+([\d\.]+)$/g

结果是一样的。唯一不同的是regex101给了我这样的评论:

重复捕获组将只捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组

--编辑

输入字符串的示例:

  • dn2.33:sc-pts-tt-as3.43
  • dn2.33:sc3.43
  • dn2.33:sc-tt-as3.43

所以基本上我不知道字母组的数量。

您可能无法获得任意数量的组,它们的数量由模式中捕获组的数量指定。您可以将
-
分隔的值匹配并捕获为一个组,然后将其与
-
拆分,以获取单个项目并动态生成结果:

var strs=['dn2.33:sc-pts-tt-as3.43'、'dn2.33:sc3.43'、'dn2.33:sc-tt-as3.43';
变量rx=/^[^::::+:([a-z]+(?:-[a-z]+)*)([\d.]+)$/;//定义正则表达式
用于(STR的var s){
var res=[];//结果数组变量
var m=rx.exec;//运行正则表达式搜索
如果(m){//如果有匹配项。。。
res=m[1]。拆分('-');//将组1的值拆分为-并分配给res
res.push(m[2]);//将组2值添加到结果数组中
}
console.log,“=>”,res;

}
您可能无法获得任意数量的组,它们的数量由模式中捕获组的数量指定。为什么不使用?@WiktorStribiżew我在编辑中添加了一些附加信息。