我遇到了这个问题,但我不是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);
};
答案 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)
答案 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。