javascript - javascript中嵌套括号的正则表达式

标签 javascript regex

我正在用 Javascript 编写一个计算器。

我想将:[表达式1]^[表达式2]翻译成:Math.pow([表达式1], [表达式2])

当我有像 5^-3 这样的简单表达式时,使用正则表达式很容易做到,但是当它带有更复杂的表达式时,例如:

(-5*(6+3)-5)^((2*2)-2)+(4*5)

由于嵌套括号,我不知道如何使用正则表达式处理它......

有什么建议吗?谢谢。

最佳答案

使用正则表达式模式:

/((?:(?=[^()]*\d)\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))\^((?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))/

检查this fiddle .

<小时/>

说明:

[步骤 1]::正则表达式模式包含两个几乎相同的子模式,与 ^ 链接。之间的符号

((?:(?=[^()]*\d)\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))
\^
((?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)|(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\)))

唯一的区别是第二个( ^ 之后)允许负数作为简单参数( \-? )

[步骤 2]::步骤 1 中的子模式有两种选择:

(?:(?=[^()]*\d)\-?\d*(?:\.\d*)?)
|
(?:\((?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)\))

[步骤 3]::第一个选择是数字 - 例如:123412.341234..1234

(?=[^()]*\d)
\-?\d*
(?:\.\d*)?

[步骤 4]::第二种选择是嵌套括号公式

\(
(?:(?:[^()]+)|(?:[^()]*\([^()]*\)[^()]*)+)
\)

[步骤 5]::可能简单也可能复杂(里面有其他括号)

(?:[^()]+)
|
(?:[^()]*\([^()]*\)[^()]*)+

[步骤 6]::如果是复杂的并且里面有一些其他括号,我们确保有嵌套

[^()]*
\(
[^()]*
\)
[^()]*

关于javascript - javascript中嵌套括号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250481/

相关文章:

javascript - 调用SectionList的scrollToLocation方法后,scroll在跳跃

php - 将字符串分解为标记,保持引用的 substr 完好无损

regex - awk 查找最后一个匹配项并打印接下来的 N 行

regex - Bash 脚本 sed 命令无法正确处理通过命令行传递的文件

javascript - 此请求返回的 header 状态

javascript - 什么时候在 React 中保存状态是安全的?

javascript - "' javascript 中的 toggleRow ' is not defined"。找不到我的函数或错误消息为 'defined' sais

javascript - 单击按钮后显示新字段

javascript - jQuery 正则表达式 ^= 之间有数字

javascript正则表达式多模式搜索