Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式,用于捕获括号之间的所有可能的数学运算_Javascript_Regex - Fatal编程技术网

Javascript正则表达式,用于捕获括号之间的所有可能的数学运算

Javascript正则表达式,用于捕获括号之间的所有可能的数学运算,javascript,regex,Javascript,Regex,我试图用javascript捕捉字符串中括号之间的数学表达式。我需要捕获只包含数字和数学运算符[0-9]、+、-、*、/、%和小数点的括号。下面的例子说明了我所追求的。我设法接近了期望的结果,但是嵌套的括号总是把我的正则表达式搞砸了,所以我需要帮助!我还需要它的全球视野,而不仅仅是第一次出现 让string=“If(2>1,If(a>100,(-2*(3-5)(8-2)),(1+2),(3(1+2))” 如果可能的话,我想做的是设法转换这个语法 如果(条件、假设、假设) 按照这种语法 如果(条件

我试图用javascript捕捉字符串中括号之间的数学表达式。我需要捕获只包含数字和数学运算符[0-9]、+、-、*、/、%和小数点的括号。下面的例子说明了我所追求的。我设法接近了期望的结果,但是嵌套的括号总是把我的正则表达式搞砸了,所以我需要帮助!我还需要它的全球视野,而不仅仅是第一次出现

让string=“If(2>1,If(a>100,(-2*(3-5)(8-2))(1+2)(3(1+2))

如果可能的话,我想做的是设法转换这个语法

如果(条件、假设、假设)

按照这种语法

如果(条件){iftrue}else{iffalse}

这样就可以通过javascript对其进行评估并在浏览器中预览。到目前为止,我已经完成了,但是如果iftrue或iffalse块包含括号,那么一切都会爆炸!所以我试图在转换语法之前捕获括号并进行计算。任何建议都将不胜感激

我得到的最接近的是这个/[\d()+-*/.]/g,它得到了我想要的,但在这个例子中

(1+2)(11)SDASD(1*(2+3))


您当前的regex
/[\d()+-*/.]/g
将匹配类中的单个字符,而不是取消(1) 但由于g标志多次出现,这就是(1和1)仍然匹配的原因 in(1<1)

根据您的模式要求,我将其更改为
/\([-+*/%.0-9()]+\)/g
。 这将匹配包含您在其中描述的一个或多个字符的括号

注意,您当前的模式在类中的某个地方有一个<代码> ->代码>,这可能导致怪异行为,因为一些正则表达式引擎将把类内的“代码>+**/COD>”作为一个范围(加上星号,这是一个严重的范围)。请注意,我在新模式中将

-
放在类的开头,以便它与实际的
-
匹配

我假设没有空括号(),如果有空括号,您可以将
+
(一个或多个)在
]
之后更改为
*
(零个或多个) 仍然添加了g标志,因此您可以匹配每一个这样的表达式


我不能百分之百肯定地说,新的正则表达式将允许您有力地转换您所声明的语法,因为它取决于“iftrue”和“iffalse”代码块的复杂性。看看您是否可以使它与新模式一起工作,否则您可能需要寻找其他解析代码的解决方案。

您可以添加最小的工作代码吗我发现的一个弱点是在这个例子中(5*(1+2)-5*(1)
if(5>10) {
  2
} else {
  2*(5+4)
}
Call function in if parenthesis and all conditions in that function.    

if(test()){
    // if code 
    }else{
    // else code  
    }

    function test(){
      // check both cases here 
      if(case 1 && case 2){
        return true
      }
      return false; 
    }