記一次字串分割的工作
也就是將
A≥1 或 A≥1&B<3
轉↓化

元件:A B C D T
符號:>< ≥ ≤ =
連線符:& |
思路:
先將字串形態的規則先做切割處理,由於要做校驗,再將切割好的字串片段存入對應的變數當中去。
具體思路:
- 先根據連線符切割成多個規則片段,每一個規則片段對應一個數組索引
- 再根據每個規則片段進行分解切割
- 同類合併存到對應的屬性上
程式碼實踐:
// 將後臺返回的字串規則切割成表單呈現 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; }, 複製程式碼