想用正则替换一段字符。比如 a+b  替换为  Base(a,b,"+")再复杂一些   ((a)+c) 替换为 Base((a),c,"+")再复杂一些  比如  (a+((b&c)&d)) 替换为  Base(a, ((b&c)&d), "+")也就是说,把加号两端的值提出来,整理成我要的这种格式,但是加号两端的值有可能是带括号的,并且还有可能是嵌套的括号,所以要保持成对,这就晕了。请高手指点!实际用的字符是下面这个串
power(brackets(radical(a), 2)+in(1, radical(a)))-power(brackets(radical(a), 2)-in(1, radical(a)))正确的结果应该是
base(power(base(brackets(radical(a), 2),in(1, radical(a)), '+')), power(base(brackets(radical(a), 2),in(1, radical(a)), '-')), '-')谢谢了

解决方案 »

  1.   

    http://book.51cto.com/art/200801/64658.htm加这篇文章  就 ok 了除非你这个表达式 不能抽象成2元运算 
      

  2.   


    var str = "power(brackets(radical(a), 2)+in(1, radical(a)))-power(brackets(radical(a), 2)-in(1, radical(a)))";var mnh = 1;
    while(/[\(\)]/.test(str))
    str=str.replace(/(\()([^\(\)]*)(\))/,function (_,a,m,b){
    return "`"+mnh+"`"+m+"~"+(mnh++)+"~";
    });
    while(/[\+\-]/.test(str))
    str=str.replace(/([^`~\+\-]*(`(\d+)`.*?~\3~)?)([\+\-])([^`~\+\-]*(`(\d+)`.*?~\7~)?)/,function (_,a,_,_,b,c){
    return "Base`"+mnh+"`"+a+","+c+',"'+{"+":"#1#","-":"#2#"}[b]+'"'+"~"+(mnh++)+"~";
    });
    str=str.replace(/`\d+`/g,"(").replace(/~\d+~/g,")").replace(/#1#/g,"+").replace(/#2#/g,"-");alert(str);