首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式,如果前面没有符号,则获取序列

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

Stack Overflow用户
提问于 2020-03-20 13:32:42
回答 2查看 70关注 0票数 0

我使用的是math.js库,我需要取一些变量的指数。我有以下字符串:

代码语言:javascript
运行
复制
//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

EN

Stack Overflow用户

发布于 2020-03-20 15:09:19

下面的正则表达式匹配所有"Euro“字符串和一个变体,但不幸的是无法匹配其中两个"OK”字符串。也许一些调整是可能的。正则表达式包含一个捕获组,用于捕获感兴趣的信息。

代码语言:javascript
运行
复制
^pow\([^,]+,(\d[^()]*|pow\(\d+,\d+(?:\)|[^()]*\([^()]*\)\)))\).*

Javascript demo

为了匹配"Euro“字符串,我假设pow(y,pow(2,1*pow(2,0.5)))+23中的pow(2,1*pow(2,0.5))表示嵌套的”pow“的最大数量。

正则表达式执行以下操作。

代码语言:javascript
运行
复制
^               # match beginning of line
pow\(           # match 'pow('
[^,]+           # match 1+ chars other than ','
,               # match ','
(               # begin capture group 1
  \d[^()]*      # match a digit, 0+ chars other than '(' and ')' 
  |             # or
  pow\(\d+,\d+  # match 'pow(', 1+ digits, ',' 1+ digits
  (?:           # begin non-cap grp
    \)          # match ')'
    |           # or
    [^()]*      # match 0+ chars other than '(' and ')' 
    \(          # match '('
    [^()]*      # match 0+ chars other than '(' and ')' 
    \)\)        # match '))'
  )             # end non-cap grp
)               # end cap grp 1
\)              # match ')'
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60769043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档