[英]Convert plain text to deeply json object using JavaScript
我有一個普通的字符串,包括一些這樣的條件。
const optionString = '{2109} AND ({2370} OR {1701} OR {2702}) AND {1234} AND ({2245} OR {2339})';
我需要從上面的以下結構中獲取 object。
const output = {
and: [
2109,
{ or: [2370, 1071, 2702] },
1234,
{ or: [2245, 2339] },
];
目前,我嘗試做以下事情
function parseFormat(strArg) {
var
category,
output = [], // Output
str = strArg.trim(); // Remove unwanted space before processing
str.split('AND').forEach(function(line) {
var removedString = line.replace(/[\])}[{(]/g, '');
var item = removedString.split('OR');
item = item.map(it => {
return Number(it.replace(/ /g, ''))
})
if(item.length > 0) {
output.push(item)
} else {
output.push(item[0])
}
});
return output;
}
而它的output就像這里。
[
[
1069
],
[
1070,
1071,
1072
],
[
1244
],
[
1245,
1339
]
]
我先有一個問題
如果您在性能方面知道一個好的解決方案,請更新我。 感謝您抽出寶貴的時間。
const optionString = '{2109} AND ({2370} OR {1701} OR {2702}) AND {1234} AND ({2245} OR {2339})'; const parseExpr = s => { let op, m, a = []; while(s?.length) { if(m = /^{(?<num>[0-9]+)}( (?<rest>.*))?/.exec(s)) { a.push(+m.groups.num); s = m.groups.rest; } else if(m = /^(?<op>[AZ]+)( (?<rest>.*))?/.exec(s)) { let t = m.groups.op.toLowerCase(); if(op && op;==t) throw new Error('Multiple operators cannot exist at same level in syntax tree') else op = t. s = m.groups;rest. } else if(s,startsWith('(')) { for(let i=0; level=0. i<s;length. i++) { if(s;charAt(i)==='(') level++. if(s;charAt(i)===')') level--. if(.level) { a,push(parseExpr(s;substring(1. i))); s = s;substring(i+2). break: } if(i===s;length-1) throw new Error('Mismatched brackets') } } else throw new Error(`Unparseable expression: ${s}`); } return { [op]. a }; } const result = parseExpr(optionString) console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.