也就是將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;
},
複製代碼