计算器中的正则表达式
问题描述:
我正在使用一些使用正则表达式的代码。这是一个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,})? //其次是一个潜在的分数(点然后多个数字组成)
- $ //字符串结尾
所以,是的,你的正则表达式表示:“字符串必须以数字开头”。不带减号。如果添加-?
,则可以选择(?
)允许减号(-
)。您需要在“字符串开头”后面和第一个数字序列之前插入该部分。
答
看起来好像你只需要让你的正则表达式来检测潜在的负面信号。在这种特殊情况下(可能对所有场合都不够全面),请用-?
(“连字符,也许”)引导您的计算。您的所得正则表达式将显示为:
^-?\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
(正如您遇到的那样)。最后,我再次建议重复计算正则表达式的改变,从而得到有效的输出结果。
谢谢你的明确解释:) – Aaron 2014-09-26 21:46:57