正则表达式有无g参数(全局搜索)时,test()结果的差异 (2012-04-11)
发布时间 2012-04-11 17:24:42
有g参数的正则表达式:
var kk=//w/w/g;
var kk= new RegExp( "//w//w" , "g" );
如果正则表达式有指定g参数全局匹配 , 则每次test()是依次获得下一个匹配。举例说明:
var s= "AABBCC" ;
var kk=/(/w/w)/g;
for (i= 0 ;i< 8 ;i++){
document .write ( "<br>" +kk.test(s));
}
上面的代码结果是3个true,1个false,再3个true,再1个false。
true
true
true
false
┄
第1次test匹配AA,第2次test匹配BB,第3次test匹配CC,第4次test找不到匹配,之后又从头重新开始:
第5次同第1次,第6次同第2次,┄┄。
所以会出现test有时候true,有时候false的情况。 这里的正则表达式必须是指定了g参数的。
利用这一特点,可以用while循环遍历所有正则匹配:
var s="AA_123_BB_456_CC";
var kk=/((/w)/2)/g;
while(kk.test(s)){
document.write ("<br>"+RegExp.$1);
}
得到结果:
AA
BB
CC
如果正则表达式没有g参数,则每次test都是从头开始匹配,不存在上述问题。
没有g参数的正则表达式:
var kk=//w/w/;
var kk= new RegExp( //w//w );
测试:
var s= "AABBCC" ;
var kk=/(/w/w)/;
for (i= 0 ;i< 8 ;i++){
document .write ( "<br>" +kk.test(s));
}
上面的代码结果是8个true,每次都是AA匹配。
true
true
true
true
┄

浙公网安备 33010602011771号