遇到了这么个例子,觉得神奇,记录一下,我估计以后浏览器更新可能结果会变化,随便看看,不要太纠结
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的时候,是两种状态