Search code examples
javascriptregexrubular

Rubular versus javascript regexp capture groups


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?


Solution

  • 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);
    }