记一次字符串分割的工作

拿到一个需求:要求将一个字符串形态的规则可编辑化。

也就是将

A≥1 或 A≥1&B<3

转↓化

元件:A B C D T

符号:>< ≥ ≤ =

连接符:& |

思路:

先将字符串形态的规则先做切割处理,由于要做校验,再将切割好的字符串片段存入对应的变量当中去。

具体思路:

  1. 先根据连接符切割成多个规则片段,每一个规则片段对应一个数组索引
  2. 再根据每个规则片段进行分解切割
  3. 同类合并存到对应的属性上

代码实践:

    // 将后台返回的字符串规则切割成表单呈现
    parseDomins(data) {
      let domains = [];
      data = data.replace(/&/g, "@&");
      data = data.replace(/[|]/g, "@|");
      data.split("@").forEach(item => {
        if (item == "") return;
        domains.push({});
        item = item.replace(/&/g, "&@");
        item = item.replace(/[|]/g, "|@");
        item = item.replace(/≥/g, "@≥@");
        item = item.replace(/≤/g, "@≤@");
        item = item.replace(/>/g, "@>@");
        item = item.replace(/=/g, "@=@");
        item = item.replace(/</g, "@<@");
        item.split("@").forEach(subitem => {
          if (item == "") return;
          switch (subitem) {
            case "&":
            case "|":
              if (domains[domains.length - 1].connectionSymbol)
                domains[domains.length - 1].connectionSymbol += subitem;
              else domains[domains.length - 1].connectionSymbol = subitem;
              break;
            case "A":
            case "B":
            case "C":
            case "D":
            case "T":
              if (domains[domains.length - 1].elementType)
                domains[domains.length - 1].elementType += subitem;
              else domains[domains.length - 1].elementType = subitem;
              break;
            case "≥":
            case "≤":
            case ">":
            case "<":
            case "=":
              if (domains[domains.length - 1].symbol)
                domains[domains.length - 1].symbol += subitem;
              else domains[domains.length - 1].symbol = subitem;
              break;
            default:
              if (domains[domains.length - 1].num)
                domains[domains.length - 1].num += subitem;
              else domains[domains.length - 1].num = subitem;
              break;
          }
        });
      });
      return domains;
    },
复制代码

结果:

猜你喜欢

转载自juejin.im/post/5c8320eef265da2da4083b43
今日推荐