js match的()和g的幺蛾子

遇到了这么个例子,觉得神奇,记录一下,我估计以后浏览器更新可能结果会变化,随便看看,不要太纠结
chrome版本 65.0.3325.181(正式版本) (64 位)

1."abcabc".match(/(b)(c)/)

结果[“bc”, “b”, “c”],我想了想,就我自己大脑解析的话,我给出的结果应该是[bc,bc,b,b,c,c]

先不说我的结果错的多离谱,为啥只有一个bc呢,因为match和g选项有关(汗,基础不扎实),如果match的时候不带g,正则只执行一次匹配

2."abcabc".match(/(b)(c)/g)

结果[“bc”, “bc”],还是和自己想的不一样,知道了g以后,我觉得这里就应该是1的结果[bc,bc,b,b,c,c]才对

那再来一个

3."abcabc".match(/bc/g)

结果[“bc”, “bc”],终于一样了,汗

4."abcabc".match(/bc/)

结果[“bc”],没问题

为了测试2为什么是这么个结果,而没有b和c,我们再看一个例子
"abcabc".match(/b/g)
"abcabc".match(/(b)/g)
结果都是[“b”, “b”],这个大概就是说,match里面捕获(一对括弧)并没有什么实际作用?这样一来2的结果就可以理解了

但是看看1,为什么1是这么个奇葩结果,我们再随意的发挥一下,得出个结论,带g和不带g,捕获(一对括弧)的表现是不一样的

不带g的时候,()是有用的,但是只匹配一次,1里面先合起来匹配了b和c,然后又分别匹配了b、c
带g的时候,()是没什么卵用的,2里面就和/bc/这样写一样样的

看下两个例子,这个就是我在别人文章里看到的例子,其实就是因为匹配一次还是多次,以及()起不起作用同时影响了结果
"abcabc".match(/(?:a)(b)(c)/)
[“abc”, “b”, “c”]
"abcabc".match(/(?:a)(b)(c)/g)
[“abc”, “abc”]


几分钟后的更新
这里写图片描述
看看我发现了什么,一只孤单的楼主╮(╯▽╰)╭,用g和不用g的时候,输出的结果的区别,之前没注意到

注意第二个输出,有index,group这些东西!第一个输出没有!这个应该可以说明用g和不用g的时候,是两种状态

猜你喜欢

转载自blog.csdn.net/u011393161/article/details/79928944