正则表达式 - 分裂数学表达式

时间:2016-09-13 08:00:39

标签: javascript regex

我正在构建一个名为formula builder的东西。想法是,用户必须在textarea中键入公式文本,然后我们将解析字符串值。结果是数组。

例如,将解析此文本

LADV-(GCNBIZ+UNIN)+(TNW*-1)

然后生成

下面的结果
["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"]

重点是分割由此字符之一加入的每个单词:+*/-(和此{ {1}};但仍然包括拆分器本身。

我尝试使用此表达式)进行拆分,但结果并未包含拆分器字符。此外,/[-+*/()]/g需要被检测为一个表达式。

-1

匹配正则表达式解决这个问题是什么?

2 个答案:

答案 0 :(得分:2)

var input = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)';
var match = input.match(/(-?\d+)|([a-z]+)|([-+*()\/])/gmi);
console.log(match);

答案 1 :(得分:1)

您可以使用match代替split替换正则表达式:



var s = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)';

var m = s.match(/(-\d+(?:\.\d+)?|[-+\/*()]|\w+)/g);

console.log(m);

//=> ["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"]




RegEx分手:

(                   # start capture group
   -                # match a hyphen
   \d+(?:\.\d+)?    # match a number
   |                # OR
   [-+\/*()]        # match one of the symbols
   |                # OR 
   \w+              # match 1 or more word characters
)                   # end capture group

交替模式的顺序很重要。