我有一个总是适合这种形式的表达式:
可变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类的任何东西.所以,任何十进制(有或没有.)或一个单词都可以匹配.四个运算符中的任何一个都可以在变量/数字之间.我只是不希望运算符被捕获,只验证它们在那里.
考虑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)