Я не могу точно понять, как работает флаг sg метода string.match(regexp) в JavaScript

В книге "JavaScript: The Good Parts" метод string.match(regexp)объясняется следующим образом:

Метод match сопоставляет строку и регулярное выражение. Как это зависит ли это от флага g. Если нет флага g, то результат вызова строки .match(regexp) аналогичен вызову регулярное выражение .exec(строка).Однако, если регулярное выражение имеет флаг g, то оно создает массив всех совпадений, но исключает захват группы:

Затем в книге приводится пример кода:

var text = '<html><body bgcolor=linen><p>This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a, i;
a = text.match(tags);
for (i = 0; i < a.length; i += 1) {
    document.writeln(('// [' + i + '] ' + a[i]).entityify());
}
// The result is
// [0] <html>
// [1] <body bgcolor=linen>
// [2] <p>
// [3] This is
// [4] <b>
// [5] bold
// [6] </b>
// [7] !
// [8] </p>
// [9] </body>
// [10] </html>

Мой вопрос в том, что я не могу понять, "но исключает группы захвата".

В приведенном выше примере кода htmlв находится в группе захвата. И почему он все еще включен в массив результатов?

И /в также находятся в группе захвата. И почему он включен в массив результатов?

Не могли бы вы объяснить «но исключая группы захвата» на приведенном выше примере кода?

Большое спасибо!

8
задан weilou 5 June 2012 в 16:42
поделиться