求一正则表达式是否符合运算规则
如:  1+6*(2+(3-1)/1+(9-5*1))

解决方案 »

  1.   


    //这里需要用到平衡组 而且只是正整数的四则混合运算,如果需要小数或者负数的 修改对应“(0|[1-9][0-9]*)”即可
    /^((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*[-+*/]?)*(((?<K>\()((0|[1-9][0-9]*)+([+*/-](0|[1-9][0-9]*))*)+[-+*/]?)+((?<-K>\))([-+*/](0|[1-9][0-9]*)[-+*/]?)*)+)*((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*)*$/
      

  2.   

    <script>
    var str="1+11*((2+3)/5)";
    var re=/^((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*[-+*/]?)*(((?<K>\()((0|[1-9][0-9]*)+([+*/-](0|[1-9][0-9]*))*)+[-+*/]?)+((?<-K>\))([-+*/](0|[1-9][0-9]*)[-+*/]?)*)+)*((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*)*$/;
    if(re.test(str)){
    alert("true");
    }
    else{
    alert("false");
    }
    </script>正则表达式语法错误???
      

  3.   

    可以考虑用eval,加一简单正则进行判断<script>
    var s = '1+6*(2+(3-1)/1+(9-5*1))';
    if(s.match(/[^\+\-\*\/0-9()]/))
    {
    alert('illegal!')
    }
    else
    {
    try
    {
    alert(eval(s));
    }
    catch(e)
    {
    alert('illegal')
    }
    }
    </script>
      

  4.   

    可以不用正则判断
    <script>
    var str = "1+6*(2+(3-1)/1+(9-5*1))";
    try{
    eval("var ret = "+str);
    if(ret!=Infinity){
    alert("right");
    }else{
    alert("wrong");
    }
    }catch(e){
    alert("wrong");
    }
    </script>
      

  5.   

    真搞笑,好像正则是万能的一样
    function test(s){ 
        try{
            return !isNaN(eval("("+s+")"));
        }catch(e){
            return false;
        }
    }alert(test("1+6*(2+(3-1)/1+(9-5*1))"));
      

  6.   


    /^((0|[1-9][0-9]*)([-+*\/](0|[1-9][0-9]*))*(?!\()[-+*\/]?)*(((?<K>\()((0|[1-9][0-9]*)+([+*\/-](0|[1-9][0-9]*))*)+(?!\()[-+*\/]?)+((?<-K>\))([-+*\/](0|[1-9][0-9]*)[-+*\/]?)*)+)*((0|[1-9][0-9]*)([-+*\/](0|[1-9][0-9]*))*)*$/
      

  7.   

    只用eval的会有一种情况.<script>
    var a3 = '4'var s  = "1*a3"//待判断的式子alert(eval(s))//以上式子会通过。
    </script>
      

  8.   

    没想到js的自动类型转换这么厉害,以前还真没有注意
    function test(s){
        var reg=/[\d\.\+\-\*\/\(\)]+/;
        try{
            return ret.test(s)&&!isNaN(eval("("+s+")"));
        }catch(e){
            return false;
        }
    }alert(test("1+6*(2+(3-1)/1+(9-5*1))"));
      

  9.   

    "4"通过没什么好讲的,因为它本身也符合
    var s="1*a3";这个通过就不太好了,用我的方法这就通不过
      

  10.   

    wackyboy, 用你的正则怎么报语法错误的,能给写个验证的例子吗?
      

  11.   

    wackyboy, 用你的正则怎么报语法错误的,能给写个验证的例子吗?
      

  12.   

    这里用正则就是一种浪费,用eval简单又好用
      

  13.   

    我这里写的是C# 中的正则 用平衡组来判断圆括号是否成对出现
    可惜的是JS中不支持平衡组 所以会出现语法错误
      

  14.   


    特想用此方法,对括号匹对方法进行比较,效率会更高。
    //这里需要用到平衡组 而且只是正整数的四则混合运算,如果需要小数或者负数的 修改对应“(0|[1-9][0-9]*)”即可
    /^((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*[-+*/]?)*(((?<K>\()((0|[1-9][0-9]*)+([+*/-](0|[1-9][0-9]*))*)+[-+*/]?)+((?<-K>\))([-+*/](0|[1-9][0-9]*)[-+*/]?)*)+)*((0|[1-9][0-9]*)([-+*/](0|[1-9][0-9]*))*)*$/