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的地方,并记录位置
它的作用就是从当前的查找位置开始,向后搜索符合条件的位置,并停留下来!
对于字符串 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 ,
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的后面,