当前位置: 首页 > 知识库问答 >
问题:

正则表达式 四则运算?

阎承
2024-07-08

let formulaStr = "";

  this.formulaArr.forEach((item) => {
    formulaStr += item.value;
  });
  const regs=/^(\d+(\.\d+)?|\([^\(\)]+\))(\s*[\+\-\*\/]\s*(\d+(\.\d+)?|\([^\(\)]+\)))*$/
  this.showErrorMsg = !regs.test(formulaStr);

formulaStr这个是带数字符号的字符串
正则表达式无法满足 加减乘除小括号嵌套使用,该表达式只能满足单层小括号

百度搜索很多无法满足

共有1个答案

锺离正祥
2024-07-08

你的正则表达式确实只能处理单层括号和简单的四则运算。要处理多层嵌套的括号和四则运算,你需要一个更复杂的正则表达式,或者更常见的做法是使用解析算法(如递归下降解析)而不是正则表达式来解析这样的公式。

不过,为了给你一个简单的正则表达式示例(请注意,这仍然是一个非常有限的解决方案,不能处理所有可能的四则运算表达式),你可以尝试使用如下的正则表达式来匹配更复杂的表达式(但仍然有限制):

/^(?:[()]*\d+(\.\d+)?([eE][-+]?\d+)?([+\-*/](?:[()]*\d+(\.\d+)?([eE][-+]?\d+)?)*)*[()]*)$/

这个正则表达式试图允许:

  • 数字(整数和浮点数)
  • 加、减、乘、除运算符
  • 括号,但仅限于在一定程度上匹配嵌套(由于正则表达式的限制,它不能处理所有可能的嵌套情况)

但请注意,这个正则表达式仍然不能正确处理所有可能的表达式,尤其是当涉及到运算符优先级和复杂的嵌套结构时。

对于更复杂的表达式解析,你通常会需要一个解析器,它可以按照预定义的规则(如四则运算的优先级)来解析和计算表达式。这样的解析器可以使用递归下降解析法、逆波兰表示法(RPN)或其他方法来构建。

如果你只是想在前端验证用户输入的公式格式是否正确(而不是计算它),那么你可能需要定义一个更严格的规则集,并使用更复杂的逻辑(可能是递归的)来验证输入是否符合这些规则。这通常涉及到编写一个解析器或状态机来遍历输入字符串并检查其结构。

 类似资料:
  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 ngx.re.* 的规范,即使您对 Lua 语言中的规范非常熟悉,我们仍不建议使用 Lua 中的正则表达式。一是因为 Lua 中正则表达式的性能并不如 ngx.re.* 中的正则表达式优秀;二是 Lua 中的正则表达式并不符合 POSIX 规范,而 ngx.re.* 中实现的是标准的 POSIX 规范,后者明显更具备通用

  • 一、概述 二、匹配单个字符 三、匹配一组字符 四、使用元字符 五、重复匹配 六、位置匹配 七、使用子表达式 八、回溯引用 九、前后查找 十、嵌入条件 参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。 正则表达式在线工具 二、匹配单个字符 . 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符; . 是元字

  • 这部分内容可以说是学习shell脚本之前必学的内容。如果你这部分内容学的越好,那么你的shell脚本编写能力就会越强。所以不要嫌这部分内容啰嗦,也不要怕麻烦,要用心学习。一定要多加练习,练习多了就能熟练掌握了。 在计算机科学中,正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模

  • 正则表达式 有些人在面对问题时,不经大脑便认为,“我知道,这里该用正则表达式”。现在他要面对两个问题了。 ——Jamie Zawinski 如果只是在字符串中进行简单的文本搜索,不要使用正则表达式,比如 string['text']。 对于简单的构建操作,使用正则表达式作为索引即可。 match = string[/regexp/] # 获取匹配的内容 first_grou

  • 目标 var web_development = "python php ruby javascript jsonp perhapsphpisoutdated"; 找出其中 包含 p 但不包含 ph 的所有单词,即 [ 'python', 'javascript', 'jsonp' ] 知识点 正则表达式的使用 js 中的正则表达式与 pcre(http://en.wikipedia.org/wi

  • 正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串,可以匹配其自身。比如,正则表达式 ‘hello’ 可以匹配字符串 ‘hello’。 要注意的是,正则表达式并不是一个程序,而是用于处理字符串的一种模式,如果你想用它来处理字符串,就必须使用支持正则表达式的工具,比如 Linux 中的 awk, sed, grep,或者编程语言 Perl,

  • 正则表达式 正则表达式为标书字符串规则的表达式。下面为两个例子为在 JavaScript 中的使用, /pattern/attrs new RegExp(pattern, attrs) 锚点 锚点用于匹配一个位置,下列为常用的锚点 ^ 起始的位置 /^http/ $ 结尾的位置 /\.jpg$/ \b 单词边界 字符类 字符类用于匹配一类字符中的一个,下面为几个常用的例子, [abc] 可用于匹配