1

我需要在 'id-odes=' 之后捕获数字,但只有没有这个短语的数字。我写了这样的东西

"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]

请帮助并解释为什么我的方法不能正常工作。谢谢

4

2 回答 2

4

您可以迭代结果,而不仅仅是输出数组:

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]);
}

演示

于 2013-02-26T08:12:05.947 回答
0

如果你想迭代匹配,那么你可以使用类似的东西:

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);给你错误的结果很简单:你得到正则表达式匹配的所有东西,不管捕获组。

于 2013-02-26T08:12:57.273 回答