解析带嵌套括号的字符串

拉霍汉

我试图用括号内的括号解析字符串。只要要解析的字符串很小,并且不必使用太多嵌套括号,一切就可以正常工作。

但是,当要解析的字符串变大时,我会不断收到类似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))"

对此

[
  'Alvor',
  '(Alv Alf Alvaro  Calvin )',
  '(Halfrid Halvar Halvard )(Tjalve Alvbert Alvard)',
  '(Alvilde Alva  Alfonse)',
  '(Alfie Alvor Joralv)'
]
let alver = "Alvor (Alv Alf Alvaro (Halfrid Halvar Halvard (Alvilde Alva (Alfie Alvor Joralv) Alfonse)) Calvin (Tjalve Alvbert Alvard))";

let open = 0;
const tree = [];

tree[0] = alver.match(/([a-zA-Z])+/)[0];

const processText = (string) => {
    let change = false;
    for(let i = 0; i < string.length; i++) {
        if(string[i] === "(") {
            open++;
        } else if(string[i] === ")") {
            change = true;

            // find inner most () and assign in to its position in the tree array
            tree[open] = tree[open] ?
                tree[open] + string.match(/\([a-zA-Z ]+\)/)[0] :
                string.match(/\([a-zA-Z ]+\)/)[0];

            open--;
            break;
        }
    }

    if(change) {
        open = 0;
        // run again with current inner most () removed
        processText(string.replace(/\([a-zA-Z ]+\)/, ""));
    }
}

processText(alver);

console.log(tree)

斯科蒂·贾米森(Scotty Jamison)

我将选择以线性方式解析它-一次扫描即可整理文件中的所有字符。无需正则表达式。它不仅使它运行得更快(并能够解析大型文本文件),而且看起来也更好。

这是一个例子:

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))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用嵌套括号解析字符串

来自分类Dev

C ++:解析带括号的数字字符串

来自分类Dev

您如何将带有嵌套括号的字符串与其他带括号的字符串匹配?

来自分类Dev

带括号的带括号的字符串返回

来自分类Dev

用Java解析带括号的布尔型字符串表达式

来自分类Dev

用Java解析带括号的布尔型字符串表达式

来自分类Dev

提取嵌套括号内的字符串

来自分类Dev

如何以嵌套括号递归解析逗号分隔的字符串

来自分类Dev

带后缀的字符串解析失败

来自分类Dev

使用grep查找带括号的字符串

来自分类Dev

在字符串中,删除仅带数字的括号

来自分类Dev

Python-基于模式的带括号的字符串拆分

来自分类Dev

重命名文件以删除带括号的字符串

来自分类Dev

python中的打印功能给带括号的字符串?

来自分类Dev

[innerHtml]:带左尖括号的字符串

来自分类Dev

如何在R中搜索带括号的字符串

来自分类Dev

查找嵌套括号中的所有字符串

来自分类Dev

检索嵌套在字符串中的每个括号的内容

来自分类Dev

如何对带括号的单词进行字符串替换,但将括号保留为 (s)?

来自分类Dev

带括号和不带括号的打印字符串的区别

来自分类Dev

解析带有递归括号的字符串

来自分类Dev

解析带有多个括号的字符串

来自分类Dev

解析括号中数字的字符串的更好方法?

来自分类Dev

解析字符串中的数字和括号?

来自分类Dev

Java从字符串中解析带时区的日期

来自分类Dev

字符串无法正确解析带空格

来自分类Dev

PHP解析逗号分隔的字符串,带双引号

来自分类Dev

如何提取括号之间的子字符串,同时忽略 Python 中嵌套括号之间的子字符串?

来自分类Dev

从位于一定数量字符后的字符串中删除带括号的子字符串

Related 相关文章

  1. 1

    用嵌套括号解析字符串

  2. 2

    C ++:解析带括号的数字字符串

  3. 3

    您如何将带有嵌套括号的字符串与其他带括号的字符串匹配?

  4. 4

    带括号的带括号的字符串返回

  5. 5

    用Java解析带括号的布尔型字符串表达式

  6. 6

    用Java解析带括号的布尔型字符串表达式

  7. 7

    提取嵌套括号内的字符串

  8. 8

    如何以嵌套括号递归解析逗号分隔的字符串

  9. 9

    带后缀的字符串解析失败

  10. 10

    使用grep查找带括号的字符串

  11. 11

    在字符串中,删除仅带数字的括号

  12. 12

    Python-基于模式的带括号的字符串拆分

  13. 13

    重命名文件以删除带括号的字符串

  14. 14

    python中的打印功能给带括号的字符串?

  15. 15

    [innerHtml]:带左尖括号的字符串

  16. 16

    如何在R中搜索带括号的字符串

  17. 17

    查找嵌套括号中的所有字符串

  18. 18

    检索嵌套在字符串中的每个括号的内容

  19. 19

    如何对带括号的单词进行字符串替换,但将括号保留为 (s)?

  20. 20

    带括号和不带括号的打印字符串的区别

  21. 21

    解析带有递归括号的字符串

  22. 22

    解析带有多个括号的字符串

  23. 23

    解析括号中数字的字符串的更好方法?

  24. 24

    解析字符串中的数字和括号?

  25. 25

    Java从字符串中解析带时区的日期

  26. 26

    字符串无法正确解析带空格

  27. 27

    PHP解析逗号分隔的字符串,带双引号

  28. 28

    如何提取括号之间的子字符串,同时忽略 Python 中嵌套括号之间的子字符串?

  29. 29

    从位于一定数量字符后的字符串中删除带括号的子字符串

热门标签

归档