That is because you did not supply the find global flag "g" to the regex constructor.
This will return an array of length 2:
var keyword = "see"; var str = "Let's see if you can see me"; var match = str.match(new RegExp(keyword, "g")); //match = see alert (match)
Whether or not ID's native findGrep is faster depends on where you get your strings from and if you want to keep a link to the actual formatted text alive. (It usually is not – I've found JS's internal string handling much, much faster than when continuously interacting with ID.)
FWIW: Sometimes InDesign's findGrep is easier to handle.
Especially when it comes to complex layout structures where nested text frames, footnotes and nested tables are all over the place. Also in case MultiStateObjects with several states are present that could contain text frames you want to inspect.