Javascript : 查找带有捕获的正则表达式以将 a^b 替换为 Math.pow(a, b)
Javascript : find regexp with capture to replace a^b by Math.pow(a, b)
我的字符串如下:
str = "(2+2)^(4*(5+6^(5^6))))";
如您所见,幂可以嵌套在另一个幂中,带或不带括号。
所以我想通过使用正则表达式将 ^ 替换为 javascript 的 Math.pow(a,b) 来转换这个字符串。
一个想法?在此先衷心感谢您。
我认为使用正则表达式来解析表达式对您来说效果不佳...
为什么不使用像 http://mathjs.org/
这样的数学表达式解析器库
这些是您的算法必须执行的步骤:
- 找到 "root
^
" 字符
- 捕获
^
前后的分组
- 重复
这里的问题是这种类型的数据结构既是递归的又是非正则的...
- 它是递归的,因为你可以有无限数量的嵌套括号,并且每个都需要单独计算
- 这是不规则的,因为例如,您可以有没有括号的组:
(2+2)^2
...这使得找到上述 "root ^
" 有问题
此外,输入可能并不总是有效(例如,用户忘记关闭括号)。
我的字符串如下:
str = "(2+2)^(4*(5+6^(5^6))))";
如您所见,幂可以嵌套在另一个幂中,带或不带括号。
所以我想通过使用正则表达式将 ^ 替换为 javascript 的 Math.pow(a,b) 来转换这个字符串。
一个想法?在此先衷心感谢您。
我认为使用正则表达式来解析表达式对您来说效果不佳...
为什么不使用像 http://mathjs.org/
这样的数学表达式解析器库这些是您的算法必须执行的步骤:
- 找到 "root
^
" 字符 - 捕获
^
前后的分组
- 重复
这里的问题是这种类型的数据结构既是递归的又是非正则的...
- 它是递归的,因为你可以有无限数量的嵌套括号,并且每个都需要单独计算
- 这是不规则的,因为例如,您可以有没有括号的组:
(2+2)^2
...这使得找到上述 "root ^
" 有问题
此外,输入可能并不总是有效(例如,用户忘记关闭括号)。