0

测试下列项目中存在哪个数学运算符(*、/、+、-):

13*4
7+8
-15/3
7-5

我有以下 JavaScript 正则表达式:

/[\*\+/\-]/

问题是正则表达式会将负号识别-15/3为运算符。如何使它与字符串中的第一个字符不匹配?

4

3 回答 3

1

你可以使用:

/.[\*\+/\-]/

这只是确保符号前面有一个字符。

这是一个非常快速和肮脏的修复,我可能更愿意制作一个完整的表达式评估器来捕捉其他一百个潜在的错误条件,但如果你想要一些简单的东西并且只比你拥有的东西更强大一点,它会做。

于 2013-09-04T07:50:28.920 回答
1

您可以像这样匹配正则表达式:

One or more digits (also allowing a decimal)
followed by optional whitespace 
followed by an operator 
followed by optional whitespace 
followed by one or more digits (also allowing a decimal)

然后在中间引用捕获的组以获取运算符:

/[\d.]+\s*([*+\-\/])\s*[\d.]+/

示例代码:

var match = str.match(/[\d.]+\s*([*+\-\/])\s*[\d.]+/);
if (match) {
    var operator = match[1];
}

工作演示和测试代码:http: //jsfiddle.net/jfriend00/DgrSg/


如果您希望在运算符之前允许的不仅仅是数字(例如其他表达式),那么您将不得不做的不仅仅是简单甚至复杂的正则表达式。这个答案假设您只是想解决您提供的示例。

于 2013-09-04T07:50:31.920 回答
0

检查您的运算符前面是否有一个数字,然后是一个数字或一个减号和一个数字。

/\d[\*\+/\-]-?\d/
于 2013-09-04T09:31:24.260 回答