如何在javascript中匹配此正则表达式
我正试图找到一种方法来解决这个问题,但我迷路了 我希望它匹配一个数学方程,该方程将接受字符串,如果:如何在javascript中匹配此正则表达式,javascript,regex,Javascript,Regex,我正试图找到一种方法来解决这个问题,但我迷路了 我希望它匹配一个数学方程,该方程将接受字符串,如果: “+-*/%”位于字符串中的任意位置,但不在输入字符串的最后一个字符中 它接受浮点和整数 它不接受字母,只接受数字和符号 有什么帮助吗 提前谢谢 您要查找的正则表达式如下所示: -?\d+(?:\.\d+)?([*/%+-]-?\d+(?:\.\d+)?)+ 基本上这意味着: NUMBER (OPER NUMBER)* 数字定义为: 可选减号 一个或多个数字 (可选)后跟一个或多个数字
- “+-*/%”位于字符串中的任意位置,但不在输入字符串的最后一个字符中
- 它接受浮点和整数
- 它不接受字母,只接受数字和符号
提前谢谢 您要查找的正则表达式如下所示:
-?\d+(?:\.\d+)?([*/%+-]-?\d+(?:\.\d+)?)+
基本上这意味着:
NUMBER (OPER NUMBER)*
数字定义为:
- 可选减号李>
- 一个或多个数字李>
- (可选)后跟一个或多个数字的句点
-3*-4
这违反了两个操作数同时存在的条件。要删除它,只需从表达式(两处)中删除-?
,即:
还不清楚是要接受多个操作数,还是只接受一个操作数。如果只有一个,那么:
-?\d+(?:\.\d+)?[*/%+-]-?\d+(?:\.\d+)?
或
或允许空格的变体(\s
)。您可能还希望使用括号捕获组
您可能需要更改该定义
也可以考虑在数字和操作数之间设置空格。< /P> 用法示例:
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");
}
编辑以回答修改后的问题
- 数字:
[0-9]
- 编号:
[0-9]+
- 带可选小数部分的数字:
[0-9]+(?:\[0-9]+)?
- 其中一个数字前面可选地加上一个操作:
([-+/%*])?([0-9]+(?:\.[0-9]+)?)
- 上面的一个,后跟零个或多个操作+数字对:
([-+/%*])?([0-9]+(?:\.[0-9]+)([-+/%*])([0-9]+(?:\.[0-9]+)?)*
在上述任何一种情况下,您都可以将
[0-9]
替换为\d。我有一个明确指定范围的习惯,因为emacs不做\d.(\d+(\.\d+))([*/%+-]\d+(\.\d+))*
可能更可取/(\d+)([*/%+-]\d+(\.\d+)+/,但首先它接受了“+-”,也接受了“+100-”,非常感谢guysbeauty和regexp的永不合作:)
\d+(?:\.\d+)?[*/%+-]\d+(?:\.\d+)?
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");
}