计算器中的正则表达式

时间:2014-09-26 21:28:01

标签: javascript regex expression

我正在使用一些使用正则表达式的代码。这是一个Javascript计算器。除以下情况外,所有方案均有效:

-number X number

否定就是抛弃一切,我已将其追踪到此功能。通常,它会返回您在计算器屏幕上看到的内容。但是,当引入负数时,它返回null。我对正则表达式不是很好,所以我希望有人能理解这一点吗?我如何允许否定?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

这是你的正则表达式:

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

让它分开:

  • ^ String以...开头
  • \ d {1,} //一个或多个数字
  • (\ ​​d {1,})? //后面是潜在的分数(点,然后是更多的数字)
  • [ - + * /] //后跟操作员
  • \ d {1,} //后跟一个或多个数字
  • (\ ​​d {1,})? //后面是潜在的分数(点,然后是更多的数字)
  • $ //字符串结尾

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

答案 1 :(得分:1)

似乎您只需要让正则表达式检测潜在的负号。在这种特殊情况下(可能对所有场合都不够全面),请使用-?("连字符,可能")进行计算。您生成的正则表达式将显示为:

^-?\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(正如您所遇到的那样)。最后,针对正则表达式更改重复相同的计算,我建议再次导致有效输出。