我能';我不能准确地理解JavaScript';s方法string.match(regexp)和#x27;国旗工作
在《JavaScript:好的部分》一书中,它解释了方法我能';我不能准确地理解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>&
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