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.....

解决方案 »

  1.   

    italicRegx = /<(i|em)>/;
    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
      

  2.   

    /g主要是用于match,replace,才有意义. 对于test来说,反而没必要使用.
      

  3.   

    比如下面的使用,效果是一样的.
    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了.
      

  4.   

    我在上面说的"replace"的效果是一样的,是指都能正确完成.但其意义当然也是不同的.对于同样的多个标签的情况,比如下面的两种情况,结果是不同的.但其本身都是"正确完成"的,在预期之内,而不是象楼主那样觉得不可思议.
    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)>/,""));
      

  5.   

    原因:用g作全局匹配时,test 方法和exec方法进行匹配时是从正则对象的lastIndex处开始匹配。匹配前,lastIndex为0,第一次匹配时italicRegx.test("<i>The Second</i>"),匹配成功,italicRegx的lastIndex是3,即下次匹配时从4个字符开始匹配;
    第二次匹配时,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的地方,去掉。