下边的代码执行之后得不到我预期的结果:
var aa = ',1,2,3,1,2,2,2,4,';
_val='2';
var re=eval('/,'+_val+',/gi');
alert(aa.replace(re,","));预期的结果是:
,1,3,1,4,而实际执行的结果是:
,1,3,1,2,4,请问怎么改?

解决方案 »

  1.   

    这是比较扯淡的做法
    _newval=_oldval.replace(re,",").replace(re,",").replace(re,",");
      

  2.   

    var aa = ',1,2,3,1,2,2,2,4,';
    _val='2';
    var re=eval('/,'+_val+'/gi');aa = aa.replace(re,"")
    alert(aa);
    试试
      

  3.   

    alert(aa.replace(eval('/,'+_val+',/gi'),","));这样就行
      

  4.   

    或者var re = new RegExp(eval('/,'+_val+',/gi'));
     alert(aa.replace(re,","));
      

  5.   

    lz 看清楚你自己定义的re输出的结果是什么就知道实际结果为什么和预期结果不一致了。
    你的re输出为:“/,2,/gi”
    这样肯定会多出一个2的,因为第3个“2”前面没了“,”,所以不会replace掉。
      

  6.   

    不对不对不对你写错了应该这样 alert(aa.replace(eval('/,'+_val+'/gi'),""));,2,2,
    只会匹配一个“ ,2,”   留下一个“2”,
      

  7.   

    eval('/,'+_val+'(?=,)/gi')  这样  右边必须是逗号 但不包含右边的逗号
      

  8.   

    不是Bug来的var aa = ',1,2,3,1,2,2,2,4,';你替换的是   ,2,那么你应该将字符串这样看',1   (,2,)   3,1  (,2,)  2  (,2,)  4,'
    所以替换结果为,1,3,1,2,4,,没错
      

  9.   


    eval('/,'+_val+'(?=,)/gi') 试过没有
      

  10.   

    感謝s1120624175馬上結帖最終結果是:
    var aa = ',1,2,3,1,2,2,2,22,202,4,';
    _val='2';
    re=eval('/,'+_val+'(?=,)/gi');alert(aa.replace(re,''));
      

  11.   

    如果确定是全部以","分隔的话,可以试试把他当做一个单词来看待嘛
    var re=eval('/\b'+_val+'\b/gi');
    alert(aa.replace(re,""));
      

  12.   

    这不是bug...楼主按照从前向后运行的次序理解就能明白...
    var aa = ',1,2,3,1,2,2,2,4,';
    而 var re=eval('/,'+_val+',/gi'); alert(re)是/,2,/gi
    字符串中的匹配点有,1,2,3,1,2,2,2,4,
    你把红色部分换为,号就是 ,1,3,1,2,4,
    得到的这个 ,1,3,1,2,4, 中的,2,的","号是替换出来的,所以正则不会去再匹配!!!!