使用javascript中的正则表达式提取整数数组

时间:2010-07-19 08:45:28

标签: javascript regex

我遇到了这个问题,但我不是javascript专家。我想做的就是让自己获得一个匹配给定regExp的字符串中所有匹配项的数组。 regExp是这样的:

[0-9]+

即。任何整数。

所以如果我通过字符串“12 09:8:76 ::: 54 12”我应该

ARR [0] = “12” ARR [1] = “09” ARR [2] = “8” ARR [3] = “76” ARR [4] = “54” ARR [5] = “12”

容易吗?不适合我!我可以在vb.net中这样做,没有问题regexp.matches(字符串)(无论如何都是这样的)。我认为javascript方法.exec也会给我一个数组,但它只返回第一个匹配。这是怎么回事?代码...

function testIt(){
    splitOutSelection2("123:::45  0::12312 12:17"); 
}


function splitOutSelection2(sSelection){
    var regExp = new RegExp("[0-9]+","g");
    var arr = regExp.exec(sSelection);
}; 

6 个答案:

答案 0 :(得分:3)

arr = sSelection.match(/[0-9]+/g);

应该这样做。

g是获取所有匹配所需的全局修饰符,而不仅仅是第一个匹配。

答案 1 :(得分:1)

类似的东西:

var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g);
alert(arrMatch);
如果设置了global,则

.match将返回一个数组(当然找到匹配项)。 [0-9] +表示它不仅会搜索单个数字,还会搜索12,09,76。

答案 2 :(得分:1)

根据doc,exec返回第一场比赛。你应该使用匹配。

var arr = sSelection.match(/[0-9]+/g);

var arr = sSelection.match(/\d+/g);

答案 3 :(得分:0)

您可以使用here中指定的代码,使用regexpal来测试您的正则表达式

答案 4 :(得分:0)

所有答案都有效,但我想保留我的regExp对象,而不是在使用时指定它。所以只需将功能更改为...

function splitOutSelection2(sSelection){
    var regExp = new RegExp("[0-9]+","g");
    var arr = sSelection.match(regExp);
}; 

..正是我所寻找的。感谢所有回复的人指出我正确的方向。

答案 5 :(得分:0)

function splitOutSelection2(sSelection){
    return sSelection.split(/[^0-9]+/g);
};

取消regExp并使用String#split。