解读Javascript正则表达式之正向预查

1. 下面是一个正则表达式匹配的例子!

var tmp=null;
var re=/(?=bbb)b/g;
while((tmp=re.exec("bbbbbbb"))!=null){
     alert(tmp.index+":"+tmp);
}

结果是弹出如下:



.........

..............

.....................

还有 2:b , 3:b , 4:b  .... 就不上图了!

2. 为什么会有这样一个结果呢?

我们可以看出这样的搜索过程!

首先是  (?=bbb), 它之所以叫做正向预查,

它的作用就是从当前的查找位置开始,向后搜索符合条件的位置,并停留下来!

对于字符串 bbbbbbb, 搜索过程如下



对步骤进行描述

A. (?=bbb)b 是正则,其中(?=bbb) 像先头部队一样,先到字符串里打探情况,找到有 bbb的地方,并记录位置
 
B. 然后在记录的位置去匹配b, 如果匹配上了, 则查找位置,移到匹配之后,也就是 b 后面,

C. 我们可以把 b看作是红旗,占领了之后, ?=bbb 就从红旗后面继续去侦察? 继续找 有bbb的地方

D. 找到之后,再拿b来匹配! 。。一直匹配到末尾!



3. ?= 在后面的预查, 这个就要好理解多了!

var tmp=null;
var re=/bb(?=c)/g;
while((tmp=re.exec("bbcbbabbc"))!=null){
     alert(tmp.index+":"+tmp);
}

bb(?=c) 的意思就是找到符合 bbc的,但是匹配的时候,只匹配 bb ,
也就是说查找位置移到bb的后面, 而不是移到bbc的后面,
然后从 bb的后面开始向后查找!



总结:?= 放在前面的时候,是用来预先查找位置的, ?=放到后面的时候,用来“假”匹配的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值