也就是将javascript
A≥1 或 A≥1&B<3java
转↓化数组
元件:A B C D Tdom
符号:>< ≥ ≤ =优化
链接符:& |spa
先将字符串形态的规则先作切割处理,因为要作校验,再将切割好的字符串片断存入对应的变量当中去。3d
// 将后台返回的字符串规则切割成表单呈现
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;
},
复制代码
这是根据老姚评论给出的方法优化而来的,能够去评论区围观之~code
// 将后台返回的字符串规则切割成表单呈现(配合修改用户标签使用)
parseDomins(data) {
let temp = [];
data = data.replace(/(\&|\|)/g, (match, p1) => `@${p1}`);
data.split("@").forEach(item => {
temp.push({});
item.replace(
/(\&|\|)?([ABCDT])(>|<|≥|≤|=)(\d+)/,
(match, connectionSymbol, elementType, symbol, num) => {
temp[temp.length - 1].connectionSymbol = connectionSymbol;
temp[temp.length - 1].elementType = elementType;
temp[temp.length - 1].symbol = symbol;
temp[temp.length - 1].num = num;
}
);
});
return temp;
},
复制代码