试下<script>
var s=['-1+T78*(2.5*T76) ','3/9*(2.8-T76/2)','T78+T76/T87-(2*(2.5*T66))','-1+D78*(2.5*T76) '];
for(var i=0,j=s.length;i<j;i++) alert(/^\s*[\d\+\-\*\/\(\)\.(T\d+)]+\s*$/g.test(s[i]));
</script>

解决方案 »

  1.   

    JS不支持递归\R,命名分组,动态正则(正则套正则,类似递归)等...所以无法实现无限层括号,所以这种问题不应该用JS的正则去做...不过用JS里强大的eval+try可轻松秒杀它,只需要把非数值替换成数值或者河蟹掉即可...好比下面...
    <script type="text/javascript">
    var strs = ['-1+T78*(2.5*T76)', '3/9*(2.8-T76/2)', 'T78+T76/T87-(2*(2.5*T66))', 'T78+T76/T87-(2*(2.5*))'];
    for (var i = 0 ; i < strs.length ; i ++) {
    var temp = strs[i];
    try {
    eval(temp.replace(/T/g, ''));
    alert('正确的:' + temp);
    } catch (exp) {
    alert('错误的:' + temp);
    }
    }
    </script>
      

  2.   

     
    我想到用eval没想到利用try,学习~