繁体   English   中英

使用Javascript检测负数以开发计算器

[英]Detecting negative numbers using Javascript for developing a calculator

我正在使用JavaScript和PHP开发分布式计算器。 计算器应识别括号并应根据括号更改计算顺序。 所有基本数学运算( */+- )具有相同的优先级(与通用优先级不同)。 我使用以下正则表达式获取用户输入并放入数组中。 此正则表达式适用于正数:

/\d*\.\d+|\d+|[()/*+-]/g

但是,当涉及到负数时 ,它会崩溃,因为我使用了一个递归替换函数,该函数用括号内的运算结果替换每对括号(和内容)。 我这样做是因为这是一个分布式计算器,我应该在服务器端执行每个原子操作,然后返回结果并将其显示在操作的历史记录中。

我要检测的是负数(将它们保存为数组中的一个元素)。 我认为它应该以这种方式工作:当有两个连续的运算符(它们之间有零个或多个空格字符),并且第二个运算符是减号( - )时,减号应连接到以下数字(如数字的符号)。 此外,如果第一个数字前面带有减号,则该符号应与该数字连接。

因为javascript的正则表达式实现中没有任何后顾之忧,所以它并不像乍看起来那样简单。

这是一种方法。 假定已先去除空格。

var m,
    tokens = [],
    rex = /(^|[(\/*+-])(-(?:\d*\.)?\d+)|[()\/*+-]|(?:\d*\.)?\d+/g,
    str = '-4-(-2*3)--4-2/-0.9-3+(3-4*-4)';

while ( m = rex.exec( str ) ) {
    if ( m[1] ) {
        tokens.push( m[1], m[2] );
    } else {
        tokens.push( m[0] );
    }
}

console.log( tokens );
// [ "-4", "-", "(", "-2", "*", "3", ")", "-", "-4", "-", "2", "/", "-0.9", "-", "3", "+", "(", "3", "-", "4", "*", "-4", ")" ]

在这里,使用捕获组()模拟后向。 如果在字符串^的开头或运算符m[1]在负数m[2] ,则将运算符和负数分别添加到数组中。 否则,将任何-作为运算符添加到数组。

或者,您可以使用

tokens = str.match( /(?:\d*\.)?\d+|[()\/*+-]/g );

然后遍历数组,如果在运算符后找到- ,则将其前缀为以下数字。

无论采用哪种方式,简单的正则表达式都不会单独标记字符串,您将需要使用条件语句来确定如何处理每个-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM