首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于不在内部方括号外的操作符拆分函数

如何基于不在内部方括号外的操作符拆分函数
EN

Stack Overflow用户
提问于 2020-10-22 02:30:28
回答 2查看 74关注 0票数 0

我是用户界面新手,我对我的角度应用程序有一个要求,我想把我的字符串拆分成数组。例如,如果我的字符串是这样的:

代码语言:javascript
复制
formula = "[ Calculation ]+[ test ]-123/LP[ Test Group MFP ]+[ Metrics1 ]*2444-76"

然后,使用regEx对操作符分隔符上的字符串进行拆分的拆分函数工作如下:

代码语言:javascript
复制
this.formula = this.formula.split(/([+*\/-])/);

并给出了如下所示的输出,这是正确的:

代码语言:javascript
复制
["[ Calculation ]" , "+" , "[ test ]" , "-" , "123" , "/" , "LP[ Test Group MFP ]" , "+" ,"[ Metrics1 ]" , "*" , "2444" , "-" , "76"]

但是它有一个问题,如果我的字符串如下所示(如果操作符在方括号内):

代码语言:javascript
复制
formula = "[ Calculation ]+[ m-4 ]-123

然后我现在的拆分函数将给出如下输出,

代码语言:javascript
复制
["[ Calculation ]" , "+" , "[ m" , "-" ,"4 ]" , "-" , "123"]

但我的预期产出是:

代码语言:javascript
复制
["[ Calculation ]" , "+" , "[ m-4 ]" , "-" , "123"]

如何实现这一点,如何分裂函数的基础上,操作符不在方括号内。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-22 02:44:33

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

代码语言:javascript
复制
a = "[ Calculation ]+[ m-4 ]-123";

let flag = false;
let ret = [];
let str = "";
for (let i = 0, l = a.length; i < l; i++) {
  let c = a.charAt(i);
  if (c === "[" || c === "]") flag = !flag;
  if (!flag && (c === "+" || c === "-" || c === "*" || c === "/")) {
    ret.push(str);
    ret.push(c);
    str = "";
  } else {
    str += c;
  }
}
if(str.length > 0) {
  ret.push(str);
}

console.log(ret);

票数 0
EN

Stack Overflow用户

发布于 2020-10-22 02:50:26

您可以尝试这样做(我是用Python编写的,因为我不知道JavaScript,但是regex应该是相同的)

Note --只有在“-”符号有一个字母和一个空格的情况下才能工作(负向后看不允许‘非固定宽度’),因此,第二个方括号有'mm-4‘(例如,它不能工作)。

代码语言:javascript
复制
formula = "[ Calculation ]+[ m-4 ]-123"
re.split('(?<!\[ .)([+*\/-])',formula)

演示

输出

代码语言:javascript
复制
['[ Calculation ]', '+', '[ m-4 ]', '-', '123']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64474389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档