为什么使用 ast 语法树修改而不是正则表达式替换?

Why use ast syntax tree modification instead of regex replacement?

javascript可以用ast把js代码转成语法树,然后根据语法树改数据,再用工具把ast语法树转成js文件,最后写入文件.像通天塔。但是正则表达式也可以实现这个功能,而且速度更快,那为什么要转成ast语法树,有什么好处吗?

根据你的问题,我假设你正在修补 JavaScript 文件。如果您有固定的字符序列,最简单的方法就是查找和替换。如果您正在处理基于模式的查找和替换,请使用正则表达式。

当您开始为更多条件编写正则表达式模式时,您的逻辑可能会遗漏或匹配太多。例如:你可能会写一个模式来匹配 if 语句,旁边有一个大括号。用户可能会在新行中键入左大括号,从而破坏您的正则表达式查找和替换。

AST 将您的代码转换为结构化格式。这种格式更易于编辑和仅在该文本节点上进行替换。这有助于不更改任何未预期的内容。

这使得 AST 转换比 string-based 解决方案更安全且更少 error-prone。