【发布时间】:2012-06-05 16:42:14
【问题描述】:
在“JavaScript: The Good Parts”一书中,它解释了方法string.match(regexp)如下:
match 方法匹配一个字符串和一个正则表达式。如何 这取决于 g 标志。如果没有 g 标志,则 调用 string .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> 中的html 位于捕获组中。为什么它仍然包含在结果数组中?
并且</html> 中的/ 也在捕获组中。为什么会包含在结果数组中?
您能用上面的代码示例解释“但不包括捕获组”吗?
非常感谢!
【问题讨论】:
标签: javascript regex string match gflags