Javascript 根据运算顺序求指数运算的极限
我有一个包含等式的字符串。我需要检查字符串,试图找到一个指数,然后根据运算顺序找到该表达式的极限。我真的不知道如何解释它,所以这里有一些字符串和预期输出来说明我的目标:Javascript 根据运算顺序求指数运算的极限,javascript,regex,Javascript,Regex,我有一个包含等式的字符串。我需要检查字符串,试图找到一个指数,然后根据运算顺序找到该表达式的极限。我真的不知道如何解释它,所以这里有一些字符串和预期输出来说明我的目标: 2*(3+4):无匹配项(无指数) 2^5:整个字符串是指数运算 4^7-6:查找4^7 5+6^3:只需查找6^3 (5+6)^3:整个字符串是指数的一部分 (6+-4)^8:整个字符串是指数的一部分,包括负数 这些数字中的任何一个也可以是单个字母变量,例如“x”。任何一边都可能有任何数学运算,所以找到我想要的(我知道的)
:无匹配项(无指数)2*(3+4)
:整个字符串是指数运算2^5
:查找4^7-6
4^7
:只需查找5+6^3
6^3
:整个字符串是指数的一部分(5+6)^3
:整个字符串是指数的一部分,包括负数(6+-4)^8
[0-9a-z\.]\^[0-9a-z\.]
但这不适用于可能的负号,也不允许对括号之类的符号进行分组(为此,您需要确保只有匹配对)。在其他一些情况下,我的上述尝试将失败
那么最好的方法是什么呢?我不知道如何用正则表达式捕捉每一个案例,也不知道如何用纯JS处理所有的可能性。你可以尝试下面的正则表达式,只得到指数部分
[a-z0-9]+(?:\^[a-z0-9]+)+|\([a-z0-9]+[-+*/]+[a-z0-9]+\)\^(?:[a-z0-9]+|\([a-z0-9]+[-+*/]+[a-z0-9]+\))
您可以尝试下面的正则表达式,只获得指数部分
[a-z0-9]+(?:\^[a-z0-9]+)+|\([a-z0-9]+[-+*/]+[a-z0-9]+\)\^(?:[a-z0-9]+|\([a-z0-9]+[-+*/]+[a-z0-9]+\))
您可以尝试下面的正则表达式,只获得指数部分
[a-z0-9]+(?:\^[a-z0-9]+)+|\([a-z0-9]+[-+*/]+[a-z0-9]+\)\^(?:[a-z0-9]+|\([a-z0-9]+[-+*/]+[a-z0-9]+\))
您可以尝试下面的正则表达式,只获得指数部分
[a-z0-9]+(?:\^[a-z0-9]+)+|\([a-z0-9]+[-+*/]+[a-z0-9]+\)\^(?:[a-z0-9]+|\([a-z0-9]+[-+*/]+[a-z0-9]+\))
如果您的输入符合您提到的内容,我建议您这样做:
-?(?:[a-z]+|\d+|\([^()]+\))\^-?(?:[a-z]+|\d+|\([^()]+\))
样本匹配:
-2^3
2^3
2^(a/b)
(a+b)^7
(a+b)^(d/c)
(5+6)^3
在中查看比赛
- 在代码中,通过设置
标志使其不区分大小写i
- 请注意,JavaScript不支持递归,因此我们在
2^(3-(2/x))
允许可选减号-?
匹配由字母构成的变量(?:[a-z]+\d+\([^()]+\)
。。。或者|`[a-z]+
- 数字
或\d+
|
一组括号\([^()]+\)
匹配求幂运算符\^
- 电源的右侧与我们在左侧允许的相同类型的令牌匹配
x^y^z..
如果要允许x^y^z..
,请修改正则表达式,如下所示:
-?(?:[a-z]+|\d+|\([^()]+\))(?:\^-?(?:[a-z]+|\d+|\([^()]+\)))+
如果你的意见与你提到的一致,我建议如下:
-?(?:[a-z]+|\d+|\([^()]+\))\^-?(?:[a-z]+|\d+|\([^()]+\))
样本匹配:
-2^3
2^3
2^(a/b)
(a+b)^7
(a+b)^(d/c)
(5+6)^3
在中查看比赛
- 在代码中,通过设置
标志使其不区分大小写i
- 请注意,JavaScript不支持递归,因此我们在
2^(3-(2/x))
允许可选减号-?
匹配由字母构成的变量(?:[a-z]+\d+\([^()]+\)
。。。或者|`[a-z]+
- 数字
或\d+
|
一组括号\([^()]+\)
匹配求幂运算符\^
- 电源的右侧与我们在左侧允许的相同类型的令牌匹配
x^y^z..
如果要允许x^y^z..
,请修改正则表达式,如下所示:
-?(?:[a-z]+|\d+|\([^()]+\))(?:\^-?(?:[a-z]+|\d+|\([^()]+\)))+
如果你的意见与你提到的一致,我建议如下:
-?(?:[a-z]+|\d+|\([^()]+\))\^-?(?:[a-z]+|\d+|\([^()]+\))
样本匹配:
-2^3
2^3
2^(a/b)
(a+b)^7
(a+b)^(d/c)
(5+6)^3
在中查看比赛
- 在代码中,通过设置
标志使其不区分大小写i
- 请注意,JavaScript不支持递归,因此我们在
2^(3-(2/x))
允许可选减号-?
匹配由字母构成的变量(?:[a-z]+\d+\([^()]+\)
。。。或者|`[a-z]+
- 数字
或\d+
|
一组括号\([^()]+\)
匹配求幂运算符\^
- 电源的右侧与我们在左侧允许的相同类型的令牌匹配
x^y^z..
如果要允许x^y^z..
,请修改正则表达式,如下所示:
-?(?:[a-z]+|\d+|\([^()]+\))(?:\^-?(?:[a-z]+|\d+|\([^()]+\)))+
如果你的意见与你提到的一致,我建议如下:
-?(?:[a-z]+|\d+|\([^()]+\))\^-?(?:[a-z]+|\d+|\([^()]+\))
样本匹配:
-2^3
2^3
2^(a/b)
(a+b)^7
(a+b)^(d/c)
(5+6)^3
在中查看比赛
- 在代码中,通过设置
标志使其不区分大小写i
- 请注意,JavaScript不支持递归,因此我们在
2^(3-(2/x))
允许可选减号-?
匹配由字母构成的变量(?:[a-z]+\d+\([^()]+\)
。。。或者|`[a-z]+
- 数字
或\d+
|
一组括号\([^()]+\)
匹配求幂运算符\^
- 电源的右侧与我们在左侧允许的相同类型的令牌匹配
x^y^z..
如果要允许x^y^z..
,请修改正则表达式,如下所示:
-?(?:[a-z]+|\d+|\([^()]+\))(?:\^-?(?:[a-z]+|\d+|\([^()]+\)))+
数学表达式的语言不是一种规则语言。你需要