简体   繁体   中英

Javascript Regexp not returning global results

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"]

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

This is expected, exec() returns a single match but provides more info about the match than match(). If you just want all the matches, use match(). From JavaScript: The Definitive Guide :

Recall that match() returns an array of matches when passed a global regular expresion. exec(), by contrast, always returns a single match and provides complete information about that match. When exec() is called on a regular epression that has the g flag, it sets the lastIndex property of the matched substring. When exec() is invoked a second time for the same regular expression, it begins its search at the character position indicated by the lastIndex property.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM