日期:2014-05-16  浏览次数:20384 次

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

------解决方案--------------------
JScript code

//这里需要用到平衡组 而且只是正整数的四则混合运算,如果需要小数或者负数的 修改对应“(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]*))*)*$/

------解决方案--------------------
可以考虑用eval,加一简单正则进行判断

JScript code
<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>

------解决方案--------------------
可以不用正则判断
JScript code
<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>

------解决方案--------------------
真搞笑,好像正则是万能的一样
JScript code
function test(s){ 
    try{
        return !isNaN(eval("("+s+")"));
    }catch(e){
        return false;
    }
}

alert(test("1+6*(2+(3-1)/1+(9-5*1))"));

------解决方案--------------------
这里用正则就是一种浪费,用eval简单又好用
------解决方案--------------------
eval