如何在javascript中匹配此正则表达式

时间:2010-03-11 00:37:28

标签: javascript regex

我正试图找到一种方法来匹配这个问题,但我很遗憾

我希望它匹配一个接受字符串的数学方程式:

  • “+ - * /%”在字符串中的任何位置,但不在输入字符串的最后一个字符
  • 它接受浮点数和整数
  • 它不接受字母只是数字和符号

任何帮助?

提前致谢!!

2 个答案:

答案 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]+)?)
  • 上面的一个,然后是零个或多个操作+ numbber对:
    ([-+/%*])?([0-9]+(?:\.[0-9]+)?)(([-+/%*])([0-9]+(?:\.[0-9]+)?))*

这不是一个等式,因为没有=符号。

您可以在上述任何一项中用\ d替换[0-9]。我习惯明确指定范围,因为emacs没有\ d。