regex - Extracting an array of integers using a regular expression in javascript - Stack Overflow

I'm having real difficulty with this but I'm no javascript expert. All I want to do is get my

I'm having real difficulty with this but I'm no javascript expert. All I want to do is get myself an array of all matches in a string which match a given regExp. The regExp being this :

[0-9]+

ie. Any integer.

So If I pass the string "12 09:8:76:::54 12" I should get

arr[0]="12" arr[1]="09" arr[2]="8" arr[3]="76" arr[4]="54" arr[5]="12"

Easy? Not for me! I could do this in vb no problem with regexp.matches(string) (something like that anyway). I thought that the javascript method .exec would also give me an array however it only returns the first match. What's going on? Code...

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


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

I'm having real difficulty with this but I'm no javascript expert. All I want to do is get myself an array of all matches in a string which match a given regExp. The regExp being this :

[0-9]+

ie. Any integer.

So If I pass the string "12 09:8:76:::54 12" I should get

arr[0]="12" arr[1]="09" arr[2]="8" arr[3]="76" arr[4]="54" arr[5]="12"

Easy? Not for me! I could do this in vb no problem with regexp.matches(string) (something like that anyway). I thought that the javascript method .exec would also give me an array however it only returns the first match. What's going on? Code...

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


function splitOutSelection2(sSelection){
    var regExp = new RegExp("[0-9]+","g");
    var arr = regExp.exec(sSelection);
}; 
Share Improve this question edited Aug 11, 2010 at 17:02 El Ronnoco asked Jul 19, 2010 at 8:45 El RonnocoEl Ronnoco 11.9k5 gold badges40 silver badges67 bronze badges
Add a ment  | 

5 Answers 5

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

should do.

g is the global modifier that you need to get all the matches, not just the first one.

something like:

var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g);
alert(arrMatch);

.match will return an array if global is set (and matches are found of course). [0-9]+ means it will search for not only single digits, but also match 12, 09, 76.

According to the doc, exec return the first match. You should use match instead.

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

or

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

All the answers work but I was wanting to keep my regExp object rather than specify it at the time of use. So simply changing the function to...

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

..is what I was looking for. Thanks for pointing me in the right direction though to all who have replied.

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

Negate the regExp and use String#split.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745633223a4637232.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信