Rubular против групп захвата регулярных выражений javascript - PullRequest
1 голос
/ 26 сентября 2011

Заметили разницу между регулярными выражениями Rubular.com и Javascript:

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

Я ожидал, что поймал 'собаку' дважды, но вместо этого я получил 'кошку' дважды.

Рубуляр захватывает «собаку» дважды, как ожидалось: http://rubular.com/r/o7NkBnNs63

Что именно здесь происходит?

1 Ответ

5 голосов
/ 26 сентября 2011

Нет, Rubular также соответствует catdog дважды. также показывает содержимое группы захвата, которая дважды захватила dog.

screen shot from rubular

Вы хотите что-то вроде этого:

var myregexp = /cat(dog)/g;
var match = myregexp.exec(subject);
while (match != null) {
    dog = match[1]
    // do something, Gromit!
    match = myregexp.exec(subject);
}
...