我正在使用一些使用正则表达式的代码。这是一个Javascript计算器。除以下情况外,所有方案均有效:
-number X number
否定就是抛弃一切,我已将其追踪到此功能。通常,它会返回您在计算器屏幕上看到的内容。但是,当引入负数时,它返回null。我对正则表达式不是很好,所以我希望有人能理解这一点吗?我如何允许否定?
function(){
return expr.match(/^\d{1,}(\.\d{1,})?[-+*/]\d{1,}(\.\d{1,})?$/);
}
谢谢!
答案 0 :(得分:2)
这是你的正则表达式:
/^\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
(正如您所遇到的那样)。最后,针对正则表达式更改重复相同的计算,我建议再次导致有效输出。