我正在使用 math.js 库,我需要获取一些变量的指数。我有以下字符串:
//Ok
pow(y,2)
pow(y,2+2)
pow(y,2-3)
pow(y,2.2)
pow(y,(23)/(2))+23123
pow(y,pow(2,pow(2,4)))-932
pow(y,pow(2,1*pow(2,0.5)))+23
//Erro
pow(y,2)*pow(2,2)
pow(y,3)-pow(2,2)
pow(y,4)+pow(2,2)
pow(y,pow(2,1*pow(2,0.5)))+pow(1,1)
我在使用正则表达式实现此搜索时遇到问题。 pow(a,b) 函数由两个参数组成,“a”是底数,“b”是指数。
在上面代码的最后四个字符串中,我只需要捕获“2”、“3”、“4”和“pow(2,1*pow(2,0.5))”。我不想选择“*”、“+”和“-”后面的部分。
由于可以链接 pow() 函数,并且“a”和“b”都可以具有算术运算符和 pow() 和 sqrt() 等函数,因此结果非常复杂。有没有办法使用正则表达式来解决这个问题?
我得到的最接近的是这个正则表达式:https://regex101.com/r/hB1cg4/4
最佳答案
正如评论中所述,在正则表达式中进行平衡匹配很困难,尽管 .NET 正则表达式风格支持此功能。请看这个答案:https://stackoverflow.com/a/35271017/8031896
尽管如此,有一种使用常见正则表达式风格的解决方法。但请注意,您可能需要根据数学符号中括号递归层的数量进行修改。
((?<=^pow)\(([^()]*|\(([^()]*|\([^()]*\))*\))*\))
演示:https://regex101.com/r/hB1cg4/6
更详细的解释请看这个答案:https://stackoverflow.com/a/18703444/8031896
关于javascript - 正则表达式,如果前面没有符号则获取序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60769043/