我正试图找到一种方法来匹配这个问题,但我很遗憾
我希望它匹配一个接受字符串的数学方程式:
任何帮助?
提前致谢!!
答案 0 :(得分:3)
你所使用的正则表达式如下所示:
-?\d+(?:\.\d+)?([*/%+-]-?\d+(?:\.\d+)?)+
基本上这意味着:
NUMBER (OPER NUMBER)*
数字定义为:
现在领先的可选减号并不严格符合您的要求,因此您可以安全地删除它但没有它就无法识别:
-3*-4
它违反了你的两个操作数的条件。要删除它,只需从表达式中删除-?
(在两个地方),即:
\d+(?:\.\d+)?([*/%+-]\d+(?:\.\d+)?)+
目前还不清楚是否要接受许多操作数或只接受一个操作数。如果它只是一个那么:
-?\d+(?:\.\d+)?[*/%+-]-?\d+(?:\.\d+)?
或
\d+(?:\.\d+)?[*/%+-]\d+(?:\.\d+)?
或允许空格的变体(\s
)。您可能还想使用括号捕获组。
您可能想要更改该定义。
你也可以考虑在数字和操作数之间留出空格。
使用示例:
var s = "-11.32 * -34";
var r = /(-?\d+(?:\.\d+)?)\s*([*/%+-])\s*(-?\d+(?:\.\d+)?)/;
var m = r.exec(s);
if (m != null) {
alert("First: " + m[1] + "\nOperand: " + m[2] + "\nSecond: " + m[3]);
} else {
alert("Not found");
}
答案 1 :(得分:0)
已编辑以回答修改后的问题。
[0-9]
[0-9]+
[0-9]+(?:\.[0-9]+)?
([-+/%*])?([0-9]+(?:\.[0-9]+)?)
([-+/%*])?([0-9]+(?:\.[0-9]+)?)(([-+/%*])([0-9]+(?:\.[0-9]+)?))*
这不是一个等式,因为没有=符号。
您可以在上述任何一项中用\ d替换[0-9]
。我习惯明确指定范围,因为emacs没有\ d。