В книге «JavaScript: The Good Parts» метод string.match(regexp)
объясняется следующим образом:
Метод match сопоставляет строку и регулярное выражение. Как это происходит, зависит от флага g. Если флаг g отсутствует, то результат вызова строки .match(regexp) будет таким же, как и вызов regexp .exec(string). Однако, если регулярное выражение имеет флаг 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
в </html>
находится в группе захвата. И почему он все еще включен в массив результатов?
А /
в </html>
тоже входит в группу захвата. И почему он включен в массив результатов?
Не могли бы вы объяснить «но исключает группы захвата» с помощью приведенного выше примера кода?
Большое спасибо!