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我在编辑中添加了一些附加信息。