使用栈来解析------------------------3[d]2[ab]2[c]、3[3[d]2[ab]2[c]]为key:value的形式

发布时间 2023-09-04 17:59:40作者: Null&boy
 1 let str = '3[d]2[ab]2[c]'
 2         let i = 0;
 3         let stark1 = [];
 4         let stark2 = [];
 5         var rest = str;
 6         function smartRepeat(str) {
 7             while (i < str.length - 1) {
 8                 rest = str.substring(i);
 9                 if (/^(\d+)\[/.test(rest)) {
10                     let times = Number(rest.match(/^(\d+)\[/)[1])
11                     i += times.toString().length + 1;
12                     stark1.push(rest.match(/^(\d+)\[/)[1]);
13                     stark2.push('');
14                 } else if (/^\w+\]/.test(rest)) {
15                     let word = rest.match(/^(\w+)\]/)[1];
16                     if (stark2.length == 1) {
17                         stark2[1] = word;
18                     } else {
19                         stark2[stark2.length - 1] = word;
20                     }
21                     i += word.length;
22                 } else if (rest[0] == ']') {
23                     let times = stark1.pop();
24                     let word = stark2.pop();
25                     stark2[stark2.length - 1] += word.repeat(times);
26                     i++;
27                 }
28             }
29             return stark2.length > 1 ? stark2[0] += stark2[1].repeat(stark1[0]) : stark2[0].repeat(stark1[0]);
30         }
31        smartRepeat(str)