Raj*_*han 3 javascript parsing
我正在尝试解析括号内有括号的字符串。只要要解析的字符串非常小并且不需要很多嵌套括号,一切都可以正常工作。
但是,当要解析的字符串变大时,我不断收到诸如FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory和 之类的错误RangeError: Maximum call stack size exceeded。
谁能告诉我如何优化/修复下面的代码,使其适用于更大尺寸的字符串,而不会出现内存和堆栈大小错误?我试图解析的大字符串可以在这里找到
目标是将字符串变成这样
"Alvor (Alv Alf Alvaro (Halfrid Halvar Halvard (Alvilde Alva (Alfie Alvor Joralv) Alfonse)) Calvin (Tjalve Alvbert Alvard))"
Run Code Online (Sandbox Code Playgroud)
对此
[
'Alvor',
'(Alv Alf Alvaro Calvin )',
'(Halfrid Halvar Halvard )(Tjalve Alvbert Alvard)',
'(Alvilde Alva Alfonse)',
'(Alfie Alvor Joralv)'
]
Run Code Online (Sandbox Code Playgroud)
"Alvor (Alv Alf Alvaro (Halfrid Halvar Halvard (Alvilde Alva (Alfie Alvor Joralv) Alfonse)) Calvin (Tjalve Alvbert Alvard))"
Run Code Online (Sandbox Code Playgroud)
我会选择以线性方式解析它 - 在一次扫描中组织文件中的所有字符。不需要正则表达式。它不仅使它运行得更快(并且能够解析大型文本文件),而且看起来也更好一些。
这是一个例子:
const data = 'Alvor (Alv Alf Alvaro (Halfrid Halvar Halvard (Alvilde Alva (Alfie Alvor Joralv) Alfonse)) Calvin (Tjalve Alvbert Alvard))'
function processText(text) {
const levels = []
let depth = 0
for (const c of text) {
if (c === '(') depth++
if (depth >= levels.length) levels.push([])
levels[depth].push(c)
if (c === ')') depth--
}
return levels.map(level => level.join(''))
}
console.log(processText(data))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |