gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:25:46 25 4
gpt4 key购买 nike

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

/\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[2] 之前有字符串 ^ 或运算符 m[1] 的开头,则运算符和负数分别添加到数组中。否则,任何 - 都会作为运算符添加到数组中。

或者,您可以使用

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

然后遍历数组,如果您发现运算符后面有 -,则将其添加到后面的数字前面。

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

关于javascript - 使用 Javascript 检测负数以开发计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com