Javascript Regexp not returning global results

StefanHayden picture StefanHayden · Sep 1, 2009 · Viewed 8.5k times · Source

It's my understanding that all three of these lines below should return an ARRAY with 2 results in it. Yet RegExp will only return 1 result no matter how many times the regex repeats in the string.

Can some one explain why? And perhaps suggest how I can get RegExp to give me global results?

//INTPUT: 
    console.log(new RegExp("New York", "gi").exec("New York New York")); 

//OUTPUT: 
["New York"]

//INTPUT: 
    console.log(new RegExp(/New York/gi).exec("New York New York"));

//OUTPUT: 
["New York"]

//INTPUT: 
    console.log("New York New York".match(/New York/gi));

//OUTPUT:
["New York", "New York"]

Answer

Rob Fonseca-Ensor picture Rob Fonseca-Ensor · Sep 1, 2009

your third example is the best way to get the array of matches.

RegExp.exec actually remembers its position, and returns the next result on subsequent calls:

>>> var v = /new york/gi
>>> v.exec("NEW YORK new york")
["NEW YORK"]
>>> v.exec("NEW YORK new york")
["new york"]
>>> v.exec("NEW YORK new york")
null