使用Regex处理数学方程字符串

Cap*_*ard 0 javascript regex

我有一个总是适合这种形式的表达式:

可变25.6 +事

这是用户输入的字符串.我想解析每个令牌,不包括运算符.我认为也许正则表达式对此有好处,但它比我预期的要难.

我正在使用javascript引擎btw.这是我到目前为止所拥有的.

/(\d+\.?\d+|\w+)(?:[\+\-\*\/])(\d+\.?\d+|\w+)/
Run Code Online (Sandbox Code Playgroud)

这适用于以下内容:

变量+ 25.6 25.6

但是,如果我扩展到多个运算符,它将失败:

变量+ 25.6 + other_variable + ...

我试过了

/((\d+\.?\d+|\w+)(?:[\+\-\*\/]))+(\d+\.?\d+|\w+)/
Run Code Online (Sandbox Code Playgroud)

因此,被动组可以重复,但它也匹配

变量+

所以我不确定为什么它与运营商匹配,即使它处于被动组.

UPDATE

变量可以是任何文本.它只是匹配\ w类的任何东西.所以,任何十进制(有或没有.)或一个单词都可以匹配.四个运算符中的任何一个都可以在变量/数字之间.我只是不希望运算符被捕获,只验证它们在那里.

hwn*_*wnd 6

考虑split使用这些运算符而不是尝试匹配每个子模式.

var r = 'variable+25.6-other_variable/21.44*44.10'.split(/[+*\/-]/);
console.log(r); //=> [ 'variable', '25.6', 'other_variable', '21.44', '44.10' ]
Run Code Online (Sandbox Code Playgroud)