在“JavaScript:The Good Parts”一书中,它解释了string.match(regexp)
如下方法:
match 方法匹配一个字符串和一个正则表达式。它如何做到这一点取决于 g 标志。如果没有 g 标志,则调用 string .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>
也是在一个捕获组中。为什么它包含在结果数组中?
您能用上面的代码示例解释“但不包括捕获组”吗?
非常感谢!