标准的正则表达式
(?<左>.*[\+\-\*\/].*)=(?<右>.*[\+\-\*\/].*)呵呵,不知道js能不能用,一直没弄明白js支不支持?<xx>这种分组正则,js达人可否告知

解决方案 »

  1.   

    见http://community.csdn.net/Expert/topic/4800/4800032.xml?temp=.988949
    已经把运算式拆分成数组了
    遍历结果数组分析一下不就知道了吗?
      

  2.   

    现在我的函数是固定的BNM(x) ,要验证用户输入的式子是否正确。
    例如:a+6-BNM(x)*8这个式子正确,而a+6-RBNM(x)*8错误,我的意思是怎么判断BNM(x)两边有没有运算符号,BNM(x)可以在公式的头和尾。
      

  3.   

    左右均有符号 (.*[\+\-\*\/].*)(BNM\(x\))(.*[\+\-\*\/].*)
    左边有符号:(BNM\(x\))(.*[\+\-\*\/].*)
    右边有符号:(.*[\+\-\*\/].*)(BNM\(x\))判断完后4种情况都要继续执行输出结果---eval()
      

  4.   

    sorry,没仔细看题目
    重来;
    左右均有符号[\+\-\*\/](BNM\(x\))[\+\-\*\/] 
    左边有符号[\+\-\*\/](BNM\(x\))
    右边有符号:(BNM\(x\))[\+\-\*\/] 其实不需要判断的直接这样就成
    try
    {
    eval('a+6-BNM(x)*8');
    }
    catch
    {
    alert('公式有误');
    }
      

  5.   

    <script>
    //a+6-BNM(x)*8这个式子正确,而a+6-RBNM(x)*8s = 'a+6-BNM(x)*8';
    foo(s);function foo(s) {
      var r = s.match(/\w+\(|\w+|\W/g);
      var r = s.match(/\w+|\W/g);
      var num = 0;
      for(var i=0; i<r.length; i++) {
        if(r[i] == '(') num++;
        if(r[i] == ')') num--;
        if(/^\w+$/.test(r[i])) {
          if(r[i+1] == '(' && r[i] != 'BNM') {
            alert('非法的函数 '+r[i]);
            return false;
          }
          if(i>0 && !/[*\/+\(-]/.test(r[i-1])) {
            alert('表达式非法 '+r.input);
            return false;
          }
        }
      }
      if(num != 0) {
        alert('括号不匹配');
        return false;
      }
      return true;
    }
    </script>
    其实你需要检查的还不止这些,比如连续的运算符
    自己加上吧