本帖最后由 benwu1210 于 2013-12-03 20:25:01 编辑

解决方案 »

  1.   

    var a='NVBCSPOTABCBSMKBDEVSDEFER';
    a=a.replace(/.BC/g,function(x){
    if(x.indexOf('A')==0){
    return x;
    }else{
    return x.substring(0,1)+'SS';
    }
    }).replace(/DE(?!F)/g,'TT');
    alert(a=='NVSSSPOTABCBSMKBTTVSDEFER');
    这样试试
      

  2.   

    你改成data = data.replace(/(?<!A)BC/g, "SS").replace(/DE(?!F)/g, "TT") 
      

  3.   

    这个:
    var data='NVBCSPOTABCBSMKBDEVSDEFER';
    data = data.replace(/(?!A)BC/g, "SS").replace(/DE(?!F)/g, "TT");  //js不支持(?<!A) 零宽度负预测先行断言,不要用
    alert(data);
      

  4.   

    我发现我问的不正确,我希望是
    把全部的「BC」replace成「SS」,
    但若「BC」前面一个字是「A」则维持不变
    且若「BC」後面一个字是「D」则维持不变所以我叁考楼上大大的稍做修改,改成
    data = data.replace(/.BC./g, function (x) 
    {
        if (x.indexOf("A") == 0)
            return x;
        else if (x.indexOf("D") == 3)
            return x;
        else
            return x.substring(0, 1) + "SS" + x.substring(3);
    });因为还有BC开头的可能性,所以我直接用笨方法去做:
    if (data.substring(0, 2) == "BC" && data(0, 3) != "BCD") 
    {
        data = "SS" + data.substring(2);
    }谢谢大大们的开释
      

  5.   


    额data.replace(/(?!A)BC(?!D)/g, "SS");我测试了一下,果然,如果BC后面是D就会被排除掉,但是前面是A就没办法了,(?!exp)只是用来判断后面的位置的,js不支持(?<!exp)好吧,暂时想不出了,我去查查
      

  6.   

    试试这个:var data='NVABCSBCDPOTABCBSMKBDEVSDEFERBC';
    data = data.replace(/[^A](BC(?!D))/g[1], "SS");
    alert(data);
      

  7.   


    纠正一下:var data='NVABCSBCDPOTABCBSMKBDEVSDEFERBC';
    data = data.replace(/([^A])BC(?!D)/g, "$1SS");
    alert(data);