Javascript 正则表达式-匹配括号内的数学表达式

Javascript 正则表达式-匹配括号内的数学表达式,javascript,regex,Javascript,Regex,我想要一个正则表达式,它将匹配一对括号内的有效数学表达式,而这对括号本身不包含任何括号 输入经过预验证,仅包含有效的数学表达式 例如,给定以下输入,正则表达式应该匹配3*4.5: (1+2+3+5*9+2+3+(3*4.5)) 我编写了以下正则表达式,它与括号内最多一个数学运算的简单情况相匹配: (?:-?\()(-?\d*\.*\d*\s*[-\+\*/]?\s*-?\d*\.*\d*)(?:\)) 它成功地匹配了3*4.5 然而,由于数学运算的数量未知,我需要更通用的解决方案。天真地,

我想要一个正则表达式,它将匹配一对括号内的有效数学表达式,而这对括号本身不包含任何括号

  • 输入经过预验证,仅包含有效的数学表达式
例如,给定以下输入,正则表达式应该匹配
3*4.5

(1+2+3+5*9+2+3+(3*4.5))

我编写了以下正则表达式,它与括号内最多一个数学运算的简单情况相匹配:

(?:-?\()(-?\d*\.*\d*\s*[-\+\*/]?\s*-?\d*\.*\d*)(?:\))
它成功地匹配了
3*4.5

然而,由于数学运算的数量未知,我需要更通用的解决方案。天真地,我认为这会奏效(在捕获组之后添加了
+
):

但是,结果是超时。看

对于下面的输入,所需的正则表达式应该返回3*4.5+7/3*-2

(1+2+3+5*9+2+3+(3*4.5+7/3*-2))


您需要一个正则表达式来匹配
然后是
以外的任何字符)
然后是

看。结果被捕获到组1中

或者,如果您有未经过滤的输入(即,它可以包含类似
(狗在午夜吠叫)的字符串,&@$:*{{28/9}
,我们可以限制此操作,以禁止任何包含
\([^a-zA-Z()]+)
(请参阅)

var re=/\([^()]+\)/g;
var str='(1+2+3+5*9+2+3+(3*4.5+7/3*-2))\n(1+2+3+5*9+2+3+(3*4.5));
var-m;
while((m=re.exec(str))!==null){
document.getElementById(“res”).innerHTML+=m[1]+“
”; }

这也符合
(狗在午夜吠叫。&$:*{^{%{35}]28/9”)
。这似乎不符合OP的要求,即匹配“括号内的有效数学表达式”。我认为输入已经“过滤”。至少在问题中没有提到这一点。当然正则表达式可以通过禁止字母来改进,比如
\(([^a-zA-Z()]+)\)
。你可能是对的,我只是把它扔出去。也许OP可以澄清。是的,输入是预先验证的。我为其他人将它添加到我的问题中。
 (?:-?\()((-?\d*\.*\d*\s*[-\+\*/]?\s*-?\d*\.*\d*)+)(?:\))
\(([^()]+)\)