italicRegx = /<(i|em)>/g;
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));结果是true,false,true,false,true,false.....
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));结果是true,false,true,false,true,false.....
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
alert(italicRegx.test("<i>The Second</i>"));
这样就ok
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/g,""));
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/g,""));
alert("<i>The Second</i>".replace(/<(i|em)>/g,""));
alert("<i>The Second</i>".replace(/<(i|em)>/g,""));
但如果是test,则结果就可能不同.但test的目的,只是为了知道"有没有",而不是"有多少",所以就不应加/g这个flag了.
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/g,""));
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/g,""));
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/,""));
alert("<i>The Second</i><i>The Second</i>".replace(/<(i|em)>/,""));
第二次匹配时,italicRegx.test("<i>The Second</i>")从lastIndex为3的‘T’开始匹配由于没有匹配成功,匹配结束,lastIndex置为0,下次从0开始匹配。所以第三次为true,后面类推。
解决方法:
1、在每次匹配前,将italicRegx的lastIndex置0即可。
2、在匹配前,把italicRegx compile 下。
3、每次匹配时用 /<(i|em)>/g来匹配,因为/<(i|em)>/g将每次都产生一个新的RegExp对象,其lastIndex为初始值0。
4、没必要用 g的地方,去掉。