Rubular.com と Javascript の正規表現の違いに気付きました。
'catdogdogcatdog'.match(/cat(dog)/g); // JS returns ['catdog', 'catdog']
'dog' を 2 回キャプチャすることを期待していましたが、代わりに 'catdog' を 2 回取得しました。
Rubular は予想どおり 2 回「犬」をキャプチャします: http://rubular.com/r/o7NkBnNs63
ここで正確に何が起こっているのですか?