javascript - 关于嵌套,如何在两个大括号之间找到代码?

标签 javascript regex algorithm parsing

我试图在两个大括号之间获取代码,但仍要注意嵌套。假设我有类似下面的内容作为输入:

while (true) {                    [A]
    dothis();
    if (whattype() == "A") {      [B]
        doA();
        if (other() == "dog") {   [C]
            doB();
        }                         [D]
    }                             [E]
    if (other() == "cat") {       [F]
        doZ();
    }                             [G]
}                                 [H]

我想递归循环每个嵌套层:

while
- if
  - if
- if

当前函数获取字符串,使用正则表达式 (\{([\s\S]*)\}) 贪婪地查找第一个和最后一个大括号之间的代码,并再次对其执行此操作内容,直到字符串中不再有大括号。

问题是正则表达式不适用于彼此相邻的代码块。正则表达式匹配 B 到 G 之间的文本。它应该从 B 开始到 E 结束,然后是从 F 到 G 的另一个 block 。

编辑:我最终可能会使用正则表达式以外的东西。对于如何处理这个问题有什么建议吗?


对于 future 的读者:

我发现有帮助的是 this另一个 SO 问题的答案。

最佳答案

这种类型的问题无法通过消耗整个 block 的正则表达式来解决。

您所描述的确实需要对 JavaScript 语言进行完整且正确的标记化。考虑例如你可能在引用的文本中包含括号......除非你真的看到更多的好处,否则我会尝试自己做这一切而不是在合理的时间内真正成功(就像你在玩弄以了解解析器的工作原理一样) ,那么你绝对应该看看 JS 解析器中的一些现有 JS。参见示例:http://marijnhaverbeke.nl/blog/acorn.html (请注意,这是 Google 给我的第一个结果,从未尝试过该库)。

关于javascript - 关于嵌套,如何在两个大括号之间找到代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334756/

相关文章:

algorithm - 通过图形网络成功传输数据向量的概率

javascript - 使用 javascript 从 ul li 获取每个层次结构级别的字符串行

javascript - Node 部分搜索

python - 如何获取所有不包含数字的特定长度的单词?

python - 如何在python中迭代动态 "depths"的字典?

java - 如何找到 int[] 中的第 K 个最大差异?

javascript - AngularJS 中发生路由更改时如何设置 ngclass 更改?

Javascript 获取变量名

javascript - 为什么注释掉这段代码的alert()行会导致它失败?

.net - 如果第一个模式失败,正则表达式会匹配另一个模式