Javascript 如何基于外方括号而非内方括号的运算符拆分函数

Javascript 如何基于外方括号而非内方括号的运算符拆分函数,javascript,angular,regex,Javascript,Angular,Regex,我是UI新手,我对angular应用程序有一个要求,我想将字符串拆分为数组。例如,如果我的字符串如下所示: formula = "[ Calculation ]+[ test ]-123/LP[ Test Group MFP ]+[ Metrics1 ]*2444-76" 然后,此拆分函数使用正则表达式在运算符分隔符上拆分字符串: this.formula = this.formula.split(/([+*\/-])/); 并给出如下输出,其精细且正确: ["

我是UI新手,我对angular应用程序有一个要求,我想将字符串拆分为数组。例如,如果我的字符串如下所示:

formula = "[ Calculation ]+[ test ]-123/LP[ Test Group MFP ]+[ Metrics1 ]*2444-76"
然后,此拆分函数使用正则表达式在运算符分隔符上拆分字符串:

this.formula = this.formula.split(/([+*\/-])/);
并给出如下输出,其精细且正确:

["[ Calculation ]" , "+" , "[ test ]" , "-" , "123" , "/" , "LP[ Test Group MFP ]" , "+" ,"[ Metrics1 ]" , "*" , "2444" , "-" , "76"]
但如果我的字符串如下所示(如果运算符位于方括号内),则有一个问题:

然后我当前的拆分函数将给出如下输出

["[ Calculation ]" , "+" , "[ m" , "-" ,"4 ]" , "-" , "123"]
但我的预期产出是:

["[ Calculation ]" , "+" , "[ m-4 ]" , "-" , "123"]

如何实现这一点,如何基于不在方括号内的运算符拆分函数。

您可以通过遍历字符串并使用方括号的标志来解决此问题。我假设总是有一个结束括号

a=“[Calculation]+[m-4]-123”;
让flag=false;
设ret=[];
设str=“”;
for(设i=0,l=a.length;i0){
后推(str);
}
控制台日志(ret)您可以试试这个(我用Python编写,因为我不懂JavaScript,但regex应该是相同的)

注意只有当“-”符号前面有一个字母和一个空格时,这才有效(后面的负像不允许“非固定宽度”),因此,如果第二个方括号有“mm-4”,例如,它将不起作用

formula = "[ Calculation ]+[ m-4 ]-123"
re.split('(?<!\[ .)([+*\/-])',formula)
formula = "[ Calculation ]+[ m-4 ]-123"
re.split('(?<!\[ .)([+*\/-])',formula)
['[ Calculation ]', '+', '[ m-4 ]', '-', '123']