首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写正则表达式将两个连续的数学运算符( "/-“、"*-")从字符串方程中分离出来?

如何编写正则表达式将两个连续的数学运算符( "/-“、"*-")从字符串方程中分离出来?
EN

Stack Overflow用户
提问于 2019-07-10 21:04:43
回答 2查看 311关注 0票数 6

我试图解决一个问题,在这个问题中,我需要将字符串方程转换成一个数字数组,而operators.But却无法这样做。

用于将字符串方程转换为数组的Regex。

代码语言:javascript
运行
复制
Input: '1+2-33/45*78'.split(/([\\+\-\\*\\/]+)/)

Output: ["1", "+", "2", "-", "33", "/", "45", "*", "78"]

但是,当您有两个连续的运算符- (*-)时,上面的正则表达式不能很好地工作。有关更多澄清,请参见下文。

代码语言:javascript
运行
复制
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!

为什么:--我试图用(+,/,-,*)运算符实现一个简单的计算器。我希望这能消除一些疑问。

EN

回答 2

Stack Overflow用户

发布于 2019-07-11 17:59:18

我同意其他用户的意见,您不应该使用regex进行表达式解析,有许多库可以更好地处理所有角落的情况。尽管如此,您当然可以构建一个正则表达式来处理问题中概述的简单表达式。

首先,让我们构建一个正则表达式,当数字(及其符号)前面有一个*/ (正向后查找)时,该正则表达式捕获它们:

代码语言:javascript
运行
复制
(?<=[/*])([+-]?\d+)

然后我们可以捕捉到这些符号:

代码语言:javascript
运行
复制
([/*+-])

最后捕获剩余的数字(没有迹象):

代码语言:javascript
运行
复制
(\d+)

现在,我们可以将各种regex段组合成简单的表达式解析器:

代码语言:javascript
运行
复制
(?<=[/*])([+-]?\d+)|([/*+-])|(\d+)

这个解决方案肯定不是防弹的,它在有空格时会分解,并且不处理括号,但是给定示例输入,它就会像预期的那样工作。

代码语言:javascript
运行
复制
var expression = '1+2-33/-45*-78'.match(/(?<=[/*])([+-]?\d+)|([/*+-])|(\d+)/g);
console.log(expression);

票数 2
EN

Stack Overflow用户

发布于 2019-07-11 17:10:54

你要找的是裁判官:

代码语言:javascript
运行
复制
/([\+\-\*\/]{1})/

{1}在结尾确保只匹配单个字符。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56978621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档