我试图解决一个问题,在这个问题中,我需要将字符串方程转换成一个数字数组,而operators.But却无法这样做。
用于将字符串方程转换为数组的Regex。
Input: '1+2-33/45*78'.split(/([\\+\-\\*\\/]+)/)
Output: ["1", "+", "2", "-", "33", "/", "45", "*", "78"]
但是,当您有两个连续的运算符- (*-)时,上面的正则表达式不能很好地工作。有关更多澄清,请参见下文。
Input: '1+2-33/-45*-78'.split(/([\\+\-\\*\\/]+)/)
Output: ["1", "+", "2", "-", "33", "/-", "45", "*-", "78"]
我预计输出如下。
输入:'1+2-33/-45*-78'
输出:["1", "+", "2", "-", "33", "/", "-45", "*", "-78"]
编辑:,我在stackOverflow上查找了这里的所有答案,但它们不能解决我前面描述的问题。
Stackoverflow的答案将像这样解决这个方程:这个字符串'7/-2*-9-8'将转换为"7“、/-”“、"2”、*-“”、"9“、"-”、"8“。
请注意连续两个操作符"/-",*
但这不是我要找的。我期望的输出如下:
预期答案: "7“、"/”、"-2“、"*”、"-9“、"-”、"8“
所以如果有类似'7/-2*-9-8‘的东西。请注意,我这里有连续的运算符(“/-”或"*-")。然后,我想在数字本身中包括负号。
堆栈溢出中的所有答案都不能解决这个问题。请重新打开question.Thanks!
为什么:--我试图用(+,/,-,*)运算符实现一个简单的计算器。我希望这能消除一些疑问。
发布于 2019-07-11 17:59:18
我同意其他用户的意见,您不应该使用regex进行表达式解析,有许多库可以更好地处理所有角落的情况。尽管如此,您当然可以构建一个正则表达式来处理问题中概述的简单表达式。
首先,让我们构建一个正则表达式,当数字(及其符号)前面有一个*
或/
(正向后查找)时,该正则表达式捕获它们:
(?<=[/*])([+-]?\d+)
然后我们可以捕捉到这些符号:
([/*+-])
最后捕获剩余的数字(没有迹象):
(\d+)
现在,我们可以将各种regex段组合成简单的表达式解析器:
(?<=[/*])([+-]?\d+)|([/*+-])|(\d+)
这个解决方案肯定不是防弹的,它在有空格时会分解,并且不处理括号,但是给定示例输入,它就会像预期的那样工作。
var expression = '1+2-33/-45*-78'.match(/(?<=[/*])([+-]?\d+)|([/*+-])|(\d+)/g);
console.log(expression);
发布于 2019-07-11 17:10:54
你要找的是裁判官:
/([\+\-\*\/]{1})/
{1}在结尾确保只匹配单个字符。
https://stackoverflow.com/questions/56978621
复制相似问题