javascript - 正则表达式,如果前面没有符号则获取序列

标签 javascript regex math mathjs

我正在使用 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/

相关文章:

php - 是否有免费网站可以在线存储代码(php、javascript、css)?

regex - 通过正则表达式从字符串中提取多个值

c++ - 正则表达式在开头单独匹配单词,或者通过不重复字符串附加到某些内容但在输入末尾

javascript - 在 TypeScript 中使用 import/require 获取接口(interface)声明

javascript - 函数作为 React 子项无效。 - React 中的功能组件

javascript - 数据表ajax更改结果索引

c - 如何通过 12 的幂来提高 double 值?

regex - Eclipse 的搜索和替换中的匹配组语法是什么

java - 确定评估整数规则时的互斥

c++ - C++中除法和乘法特殊顺序的原因