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