Нет, Rubular также соответствует catdog
дважды. также показывает содержимое группы захвата, которая дважды захватила dog
.
Вы хотите что-то вроде этого:
var myregexp = /cat(dog)/g;
var match = myregexp.exec(subject);
while (match != null) {
dog = match[1]
// do something, Gromit!
match = myregexp.exec(subject);
}