JS正则表达式匹配,没有捕获的条件

问题描述:

我需要在'id-odes ='之后捕获数字,但只有没有这个短语的数字。我写了这样的事情JS正则表达式匹配,没有捕获的条件

"id-odes=50388635:id-odes=503813535:id-odes=50334635" 
    .match(/(?:id-odes=)([0-9]*)/g); 

但它返回

["id-odes=50388635", "id-odes=503813535", "id-odes=50334635"] 

,而不是

[50388635, 503813535, 50334635] 

请帮忙解释一下,为什么我的方式不能正常工作。 感谢

+1

为什么你需要根据“id-odes =”创建一个组,你不能只跳过第一对括号吗? – RipperDoc 2013-02-26 08:06:07

+0

@RipperDoc我只需要ids返回,但ID后'id-odes ='字符串 – pucek89 2013-02-26 08:13:44

而不是只输出数组,你可以遍历结果:

var re =/id-odes=([0-9]*)/g, 
s = "id-odes=50388635:id-odes=503813535:id-odes=50334635"; 

while ((match = re.exec(s)) !== null) { 
    console.log(match[1]); 
} 

Demo

+0

@Tim感谢您的编辑:) – 2013-02-26 08:14:24

如果你想遍历的比赛,那么你可以使用类似:

s = "id-odes=50388635:id-odes=503813535:id-odes=50334635" 
re = /(?:id-odes=)([0-9]*)/ 
while (match = re.exec(s)) 
{ 
    console.log(match[1]); // This is the number part 
} 

假设整个字符串正是这种格式,你当然可以使用 "id-odes=50388635:id-odes=503813535:id-odes=50334635".match(/[0-9]+/g),但如果字符串中还有其他数字,这当然会中断。

解释为什么.match(/(?:id-odes=)([0-9]*)/g);给你错误的结果很简单:无论是否捕获组,都可以找回正则表达式匹配的所有东西。

+0

它的工作原理,但它不是我要找的,我想获得结果在匹配数组没有迭代if这可能是 – pucek89 2013-02-26 08:27:56

+0

我更新了答案,尽管这是一个非常非常脆弱的解决方案。如果你真的和非常清楚地知道所有进入的数据都是这种格式(即你想提取所有数字) – KillerX 2013-02-26 11:42:42