![](/img/trans.png)
[英]Sum the negative numbers of an array using reduce() in 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.