各位大侠:
对于一个这样的字符串:str="(DWDM='423' or 2) and (4 or DWDM='423') or 3",我想将其中的数字替换成别的字符串,但是一对单引号''之间的数字不被替换,即第一次将数字 2 替换成a,则变成"(DWDM='423' or a) and (4 or DWDM='423') or 3";第二次替换 3 为 b 则变成 "(DWDM='423' or a) and (4 or DWDM='423') or b",第三次替换 4 为c则变成
"(DWDM='423' or a) and (c or DWDM='423') or 3";
对于这样的需求,在js中的replace函数的参数的正则表达式该如何书写?
急求!!!不甚感激!!!

解决方案 »

  1.   

    var str="(DWDM='423' or 2) and (4 or DWDM='423') or 3";
    str = str.replace(/\d\d\d/g,"四二三");
    str = str.replace(/2/,"a");
    str = str.replace(/3/,"b");
    str = str.replace(/4/,"c");
    str = str.replace(/四二三/g,"423");
    alert(str);
      

  2.   

    这个貌似不行,能不能直接用一个正则表达式匹配单引号外的数字,因为我的需求是要循环替换字符串
    "(DWDM='423' or 2) and (4 or DWDM='423') or 3"中单引号外的数字,即循环从 1 开始,看有没有匹配的单引号外的数字,有则替换为其他字符串,不一定是上面的 a,替换的过程中也可能回引入其他数字啊,比如循环当i=2时,替换上面的 2 为 "RKSJ='234'",变成 "(DWDM='423' or RKSJ='234') and (4 or DWDM='423') or 3",然后继续循环 i=3 
      

  3.   


    var str="(DWDM='423' or 2) and (4 or DWDM='423') or 3";
    var arr = ["a","b","c","d"];
    str = str.replace(/[^'\d]\d+[^'\d]?/g,function($1){
       return $1.replace(/\d/g,function($1){return arr[parseInt($1) - 1]});
    });
    alert(str);楼主是要这样吗?
      

  4.   

    您好!关于那个正则表达式的问题,我的完整需求是这样的:首先 js获取页面的一个用户输入的逻辑表达式,比如 ((1 | 2) & (2 | 3)) & 5 这样的表达式,然后从页面的input输入框中取值,形成一个数组,数组中的值类似 DWDM='423' 、RKSJ>'234'等;然后对这个数组循环,依次用数组i项内容替换逻辑表达式(上面的 ((1 | 2) & (2 | 3)) & 5)中的单引号外(因为替换过程中会引入新的带单引号的数字)的数字,比如第一次替换 1 后变成 (( DWDM='423'  | 2) & (2 | 3)) & 5,第二次替换 2 变成  (( DWDM='423'  | RKSJ>'234') & (RKSJ>'234' | 3)) & 5。求教!谢谢!
      

  5.   

    function aa(){ 
    var sp = "(DWDM='423' or a) and (c or DWDM='423') or 3";
                    sp = sp.replace(/[2]/g, 'a');
                    alert(sp);
                    sp = sp.replace(/[3]/g, 'b');
                    alert(sp);
                    sp = sp.replace(/[4]/g, 'c');
                    alert(sp);               
    }这个是js里的。你写个按钮调用下就是
      

  6.   


    var str="((1 | 2) & (2 | 3)) & 5";
    var arr = ["DWDM='423'" ,"RKSJ>'234'","ACK'123'","DWDM='567'","DWDM='000'"];
    str = str.replace(/[^'\d]\d+[^'\d]?/g,function($1){
       return $1.replace(/\d/g,function($1){return arr[parseInt($1) - 1]});
    });
    alert(str);这样不行吗?