代码如下:
'aaabbbcccdddeeefff'.match(/[abc]\1/g);//null
'aaabbbcccdddeeefff'.match(/([abc])\1/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/(([abc])\1)\1/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/(([abc])\1)\2/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/((([abc])\1)\2)\3/g);//["aaa", "bbb", "ccc"]
第一行可以验证出,反向引用针对的是分组。
第二三行结果,符合预期。
后面的就不懂了。。。
求解释,为什么??这个分组,针对的是嵌套分组,还是平行分组(/()()()/)?
按我的理解,第四行结果应当是:["aaaa", "bbbb", "cccc"],但给的测试串没有四个的,所以应当匹配无果,null。
ps:运行结果都是在chrome版本 35.0.1916.153 m下运行。
总结下结论:
每个反向引用都由一个编号或名称来标识,并通过“\编号”表示法进行引用,外面的组的编号靠前。也就是说引用分组是编号排列是从外到内编排。
基于此理论,就可以很好地解释代码的运行结果。
相关分类