JavaScript正则表达式构造

本文关键字:正则表达式 JavaScript | 更新日期: 2023-09-27 18:30:10

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

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

我有以下JavaScript正则表达式:

/['*'+/'-]/

问题是regex会将-15/3中的符号标识为运算符。如何使它与字符串中的第一个字符不匹配?

JavaScript正则表达式构造

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

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/


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

您可以使用:

/.['*'+/'-]/

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

这是一个非常快速和肮脏的解决方案,我可能更喜欢制作一个完整的表达式计算器来捕捉其他一百个潜在的错误条件,但如果你想要简单的东西,并且只比现有的稍微强大一点,它就可以了。

检查运算符前面是否有数字,后面是否有数字或减号和数字。

/'d['*'+/'-]-?'d/