1

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.net 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);
}; 

5 Answers 5

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, this works. I realise that I should be using match and not exec. I was specifying the global modifier in my regExp declaration. But it is 'match' that is the key. My code can be rewritten as.. function splitOutSelection2(sSelection){ var regExp = new RegExp("[0-9]+","g"); var arr = sSelection.match(regExp); };
1

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.

1 Comment

Thanks. I initially thought that match wasn't working but it was not working because I hadn't set the g flag. This is why I went down the exec route which was incorrect.
1

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

Comments

0

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.

Comments

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

Negate the regExp and use String#split.

1 Comment

Thanks, I'm sure this will work too. Is using split and a negated match more efficient than using exec?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.