用正则表达式处理数学方程字符串



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

变量- 25.6 +的

这是用户输入的字符串。我想解析每个令牌,不包括操作符。我想也许一个正则表达式会很好,但它比我想象的要难。

我正在使用javascript引擎顺便说一句。以下是我到目前为止写的。

/(d+.?d+|w+)(?:[+-*/])(d+.?d+|w+)/

变量变量+ 25.625.6

但是,如果展开为多个操作符,则失败:

变量+ 25.6 + other_variable +…

我试着

/((d+.?d+|w+)(?:[+-*/]))+(d+.?d+|w+)/

使得被动组可以重复,但是,它也匹配

+

变量

所以我不确定为什么它匹配操作符,即使它是在一个被动组。

变量可以是任何文本。它就是任何与w类匹配的东西。因此,任何小数(带或不带。)或单词都可以匹配。这四种操作符中的任何一种都可以在变量/数字之间。我只是不希望操作符被捕获,只验证它们是否存在。

考虑对这些操作符进行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' ]

最新更新