计算器中的正则表达式

计算器中的正则表达式

问题描述:

我正在使用一些使用正则表达式的代码。这是一个Javascript计算器。所有场景的工作,除了:计算器中的正则表达式

-number X number 

消极的是扔掉一切,我已经跟踪到这个功能。通常情况下,它会返回到您在计算器屏幕上看到的内容。但是,当引入负数时,它将返回null。我用正则表达式不太好,所以希望有人能理解这个吗?我怎样才能允许否定?

function(){ 
return expr.match(/^\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/); 
} 

谢谢!

这是你的正则表达式:

/^\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/ 

让我们把它分解开:

  • ^字符串开始与...
  • \ d {1,} //一个或多个数字
  • (。\ d {1,})? //后跟一个潜在分数(点,然后加入更多位)
  • [ - + * /] //随后由操作者
  • \ d {1,} //接着是一个或多个数字
  • ( \ d {1,})? //其次是一个潜在的分数(点然后多个数字组成)
  • $ //字符串结尾

所以,是的,你的正则表达式表示:“字符串必须以数字开头”。不带减号。如果添加-?,则可以选择(?)允许减号(-)。您需要在“字符串开头”后面和第一个数字序列之前插入该部分。

+0

谢谢你的明确解释:) – Aaron 2014-09-26 21:46:57

看起来好像你只需要让你的正则表达式来检测潜在的负面信号。在这种特殊情况下(可能对所有场合都不够全面),请用-?(“连字符,也许”)引导您的计算。您的所得正则表达式将显示为:

^-?\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$

考虑从一个的NodeJS终端执行以下操作:

> "3+2".match(/^\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/); 
[ '3+2', 
    undefined, 
    undefined, 
    index: 0, 
    input: '3+2' ] 
> "-3+2".match(/^\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/); 
null 
> "-3+2".match(/^-?\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/); 
[ '-3+2', 
    undefined, 
    undefined, 
    index: 0, 
    input: '-3+2' ] 

第一次尝试是使用一个简单的“3 + 2”的计算与提供的代码,这正确解析。第二次尝试将相同的正则表达式应用于“-3 + 2”并返回null(正如您遇到的那样)。最后,我再次建议重复计算正则表达式的改变,从而得到有效的输出结果。