正则表达式-分割的数学表达式

Regex - split mathematic expression

本文关键字:表达式 分割 正则表达式      更新时间:2023-09-26

我正在构建一个叫做公式生成器的东西。这个想法是,用户必须在textarea中键入公式的文本,然后我们将解析字符串值。结果是array.

例如,以下文本将被解析

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

则生成

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

关键是拆分由以下字符之一连接的每个单词:+, *, /, -, (和这个);但仍然包括拆分器本身。

我尝试使用此表达式/[-+*/()]/g进行拆分,但结果不包括拆分符。并且-1也需要作为一个表达式来检测。

["LADV", "MISC", "", "GCNBIZ", "UNIN", "", "", "TNW", "", "1", ""]

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

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

您可以使用match代替split,并使用regex:

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

模式交替的顺序很重要。