1

Noticed a difference between what Rubular.com and Javascript regexes:

'catdogdogcatdog'.match(/cat(dog)/g);  // JS returns ['catdog', 'catdog']  

I expected to capture 'dog' twice but instead I get 'catdog' twice.

Rubular captures 'dog' twice as expected: http://rubular.com/r/o7NkBnNs63

What is going on here exactly?

Roxicus
  • 109
  • 1
  • 7

1 Answers1

5

No, Rubular also matches catdog twice. It also shows you the contents of the capturing group, which captured dog twice.

screen shot from rubular

You want something like this:

var myregexp = /cat(dog)/g;
var match = myregexp.exec(subject);
while (match != null) {
    dog = match[1]
    // do something, Gromit!
    match = myregexp.exec(subject);
}
Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561