关于javascript正则“反向引用”

前言:一直忙着找实习单位,足足有一个半月没有写过博客,也没有学习过,终于找到一个勉强合适的,还是赶紧加油吧,别被别人甩太远了!(话说这天好冷啊委屈委屈委屈)。

本来是在看着阿树博客里的jQuery规范的,不知道怎么搞得,稀里糊涂的就看到正则去了,把学到的东西总结一下:


首先先看下面这个例子:

"abcd".match(/(a(bc)d)/);
//result: ["abcd", "abcd", "bc"]
这个例子说明看括号匹配顺序是按 左括号计算的。(这是别人的理解,我的理解是匹配顺序是按 从外到里从左到右计算的,每个反向引用都由一个编号或名称来标识,并通过“\编号”表示法进行引用, 外面的组的编号靠前。也就是说引用分组是编号排列是从外到内编排。)

再看这个例子

'aaa'.match(/(a\1)/);
//result: ['a']
'aaaaaaa'.match(/(a\1\1\1\1\1)/);
//result: ['a']


/(a\1)/ 在第一个括号中使用\1引用是没有意义的,看来在chrome中的测试结果表明,无论在第n个括号中有几个\n都会被忽略。(既从最外层括号往里层数)

'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"]

基于这个原因,浏览器其实把下边的正则翻译成以下这样:

'aaabbbcccdddeeefff'.match(/[abc]\1/g);//null
'aaabbbcccdddeeefff'.match(/([abc])\1/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/(([abc]))\1/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/(([abc]))\2/g);//["aa", "bb", "cc"]
'aaabbbcccdddeeefff'.match(/((([abc]))\2)\3/g);//["aaa", "bbb", "ccc"]

详细请看:http://segmentfault.com/q/1010000000580762


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值