Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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,我真的需要正则表达式方面的帮助,我正在处理一个函数,比如 var x = 0; function doMath(myVar){ RE = //; // here is the problem if(RE.test(myVar)) eval(x+myVar) else return false; } 我想让RE匹配任何可以加到这个数字上的数学方程,比如 EXAMPLE +10+20+30 //accepted **10 //rejected -10- // rejected 10

我真的需要正则表达式方面的帮助,我正在处理一个函数,比如

var x = 0;

function doMath(myVar){

RE = //; // here is the problem 
if(RE.test(myVar))
  eval(x+myVar)
else
return false;

}
我想让RE匹配任何可以加到这个数字上的数学方程,比如

EXAMPLE 
+10+20+30 //accepted
**10 //rejected
-10- // rejected
10 // rejected
%10 //accepted
*(10+10)-10 //accepted
请帮帮我


}

只测试有效字符(以防止某些代码注入),然后尝试“评估”如何


如注释中所述,算术公式不是正则表达式,因此不要使用正则表达式处理它们

为算术表达式编写一个语法分析器,并使用类似的解析器生成器从给定语法生成javascript解析器

数学表达式的示例CFG


在页面上向下滚动至“指定语言”部分。该部分给出了解析算术表达式的语言语法。希望这能有所帮助。

数学公式不是一种常规语言(由于平衡括号问题),因此您真的不应该尝试使用单个正则表达式来解析它。我该怎么办?有什么建议吗?我同意戴维的看法。如果最终目标是对表达式求值,那么应该尝试使用后缀方法和堆栈对其求值@法拉利车迷。。这应该作为一个answer@ferrari-但如何将表达式转换为后缀符号?这和首先计算表达式一样困难,你仍然需要正确地解析和理解它…我在4小时前刚刚写了同样的内容,这时by boss进来了:P。你应该注意,验证也阻止了代码注入(例如,如果文本来自查询字符串)。谢谢@Kobi,添加了一些单词,但我不是100%确定,它完全阻止了代码注入。:-)不过,我没有看到任何只使用0-9和数学运算符的注入。
function doMath(myVar){
    if (/^[0-9()%*\/+-]+$/.test(myVar)){
        try{
             return eval(myVar);
        }catch(e){}
    }
    return false;
}