function isExpression(str)
{
try
{
eval("var v="+str);
alert(str+"="+v);return true;
}
catch(e){alert("错误的表达式:"+str);return false;}
}
Equalition="1+1-(1*(2+3))";
isExpression(Equalition)
Equalition="1+2(2+3)";
isExpression(Equalition)

解决方案 »

  1.   

    <script>
    var str="1+11*((2+3))"
    var re=/^[\d-+*/()]+$/g;
    var re2=/\d\(/g;
    var re3=/\(/g;
    var re4=/\)/g;
    var re5=/[-+*/][-+*/]/g;
    if (re.test(str)&&(!re2.test(str))&&(str.match(re3).length==str.match(re4).length)&&(!re5.test(str)))
    {alert("ok")}
    else
    {alert("no")}</script>
      

  2.   

    to: 回复人:jinjuduo() 
    "+3*"  //教本报错
    "+(4)(5)"  测试ok
    "12+(13*)"  测试ok
      

  3.   

    (?R<E>)(
    (?<E>(?R<T>)(?R<E1>))
    (?<E1>([+*/-](?R<T>)(?R<E1>))|.{0})
    (?<T>(\((?R<E>)\))|(?R<number>))
    (?<number>[+|-]?\d*\.?\d+(e[+-]?\d+)?)
    ){0}
    这个可能可以用
    可以匹配这样
    0123456789.0e-2++.22222e-2--.2e-2/-2*(-2*(+2*+2+(.3)))
    变态的四则运算。
    原理用的是消除左递归。
    E->TE1
    E1->(+|-|*|/)TE1|e
    T->(E)|NUMBER