在javascript中使用正则表达式提取整数数组
我在这方面确实有困难,但我不是javascript专家。我所要做的就是让自己得到一个字符串中所有匹配项的数组,这些匹配项与给定的regExp匹配。正则表达式如下所示:在javascript中使用正则表达式提取整数数组,javascript,regex,Javascript,Regex,我在这方面确实有困难,但我不是javascript专家。我所要做的就是让自己得到一个字符串中所有匹配项的数组,这些匹配项与给定的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.matcheString之类的东西
[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.matcheString之类的东西都没有问题。我认为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);
};
应该这样做
g是获取所有匹配项所需的全局修饰符,而不仅仅是第一个匹配项
应该这样做
g是获取所有匹配项所需的全局修饰符,而不仅仅是第一个匹配项。类似于:
var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g);
alert(arrMatch);
.match将返回一个数组,如果设置了全局,当然找到了匹配项。
[0-9]+意味着它不仅会搜索单个数字,还会搜索匹配的12、09、76。类似于:
var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g);
alert(arrMatch);
.match将返回一个数组,如果设置了全局,当然找到了匹配项。
[0-9]+意味着它不仅要搜索单个数字,还要搜索匹配的12、09、76。根据文档,exec返回第一个匹配项。你应该改用match
var arr = sSelection.match(/[0-9]+/g);
或
根据文档,exec返回第一个匹配项。你应该改用match
var arr = sSelection.match(/[0-9]+/g);
或
所有答案都有效,但我希望保留我的regExp对象,而不是在使用时指定它。因此,只需将函数更改为
function splitOutSelection2(sSelection){
var regExp = new RegExp("[0-9]+","g");
var arr = sSelection.match(regExp);
};
…这就是我要找的。感谢您为我指明了正确的方向,尽管我已经回复了所有人。所有答案都有效,但我希望保留我的regExp对象,而不是在使用时指定它。因此,只需将函数更改为
function splitOutSelection2(sSelection){
var regExp = new RegExp("[0-9]+","g");
var arr = sSelection.match(regExp);
};
function splitOutSelection2(sSelection){
return sSelection.split(/[^0-9]+/g);
};
…这就是我要找的。谢谢你为我指出了正确的方向,尽管是对所有回复的人
function splitOutSelection2(sSelection){
return sSelection.split(/[^0-9]+/g);
};
对regExp求反并使用Stringsplit
否定regExp并使用Stringsplit。谢谢,这很有效。我意识到我应该使用match而不是exec。我在regExp声明中指定了全局修饰符。但关键是“匹配”。我的代码可以重写为。。函数splitOutSelection2sSelection{var regExp=new regExp[0-9]+,g;var arr=sSelection.matchregExp;};谢谢,这个有用。我意识到我应该使用match而不是exec。我在regExp声明中指定了全局修饰符。但关键是“匹配”。我的代码可以重写为。。函数splitOutSelection2sSelection{var regExp=new regExp[0-9]+,g;var arr=sSelection.matchregExp;};谢谢我最初认为这场比赛不起作用,但它不起作用,因为我没有设置g标志。这就是为什么我选择了错误的执行路线。谢谢。我最初认为这场比赛不起作用,但它不起作用,因为我没有设置g标志。这就是为什么我选择了错误的执行路线。谢谢,我相信这也会奏效。使用拆分和否定匹配是否比使用exec更有效?谢谢,我相信这也会起作用。使用拆分和否定匹配是否比使用exec更有效?