我能';我不能准确地理解JavaScript';s方法string.match(regexp)和#x27;国旗工作

我能';我不能准确地理解JavaScript';s方法string.match(regexp)和#x27;国旗工作,javascript,regex,string,match,gflags,Javascript,Regex,String,Match,Gflags,在《JavaScript:好的部分》一书中,它解释了方法string.match(regexp),如下所示: match方法匹配字符串和正则表达式。怎么样 这是否取决于g标志。如果没有g标志,则 调用string.match(regexp)的结果与调用 regexp.exec(字符串)。但是,如果regexp具有g标志,则 生成所有匹配项的数组,但不包括捕获 小组: 然后,本书提供了代码示例: var text = '<html><body bgcolor=linen>&

在《JavaScript:好的部分》一书中,它解释了方法
string.match(regexp)
,如下所示:

match方法匹配字符串和正则表达式。怎么样 这是否取决于g标志。如果没有g标志,则 调用string.match(regexp)的结果与调用 regexp.exec(字符串)。但是,如果regexp具有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>
var text='这是粗体的!';
变量标记=/[^]+|/g;
var a,i;
a=文本匹配(标记);
对于(i=0;i
// [9] 
// [10] 
我的问题是,我不能理解“但排除了捕获群体”

在上面的代码示例中,
中的
html
位于捕获组中。为什么它仍然包含在结果数组中

中的
/
也在捕获组中。为什么它包含在结果数组中

您能用上面的代码示例解释一下“但不包括捕获组”吗


多谢各位

g修饰符用于全局应用正则表达式。如果没有它,正则表达式将匹配并返回找到的第一个匹配项。使用它,它搜索并匹配字符串中的所有匹配项

在上面的代码示例中,中的html位于捕获组中。为什么它仍然包含在结果数组中

因为这是全场比赛。当他说“但不包括捕获组”时,他并不是指完全匹配结果中的捕获组内容,只是在数组中没有重复。如果包括捕获组,您将看到

// The result is
// [0] <html>
// [1]           // From the capture group; nothing here
// [2] html      // From the capture group
// [3]           // From the capture group; nothing here
// ...
在每种情况下,数组中的条目都是完全匹配的,其中包括组成整个表达式的捕获组中匹配的字符

如果我们删除了
g
标志,但没有更改任何其他内容,我们将获得第一个完整匹配,然后是两个捕获组的内容:

[0]: 'test1' // The full match, including the stuff from each capture group [1]: 'test' // Capture group 0's contents [2]: '1' // Capture group 1's contents [0]:“test1”//完整匹配,包括来自每个捕获组的内容 [1] :'test'//捕获组0的内容 [2] :'1'//捕获组1的内容
在那里,第一个条目是完全匹配;第二个和第三个是捕获组的内容。请注意,捕获GROUPS的内容

非常感谢!你的回答是正确的、详细的、有用的@魏楼::-)谢谢!很高兴这有帮助。最好的, [0]: 'test1' [1]: 'test2' [0]: 'test1' // The full match, including the stuff from each capture group [1]: 'test' // Capture group 0's contents [2]: '1' // Capture group 1's contents