关于javascript解析的建议/建议

关于javascript解析的建议/建议,javascript,regex,Javascript,Regex,我需要一种机制,它将获取包含同步函数调用的相当小的javascript片段,并将其重写为异步javascript 例如,如果我有一个片段 someSyncFunction(); console.log("function complete") 我需要将它重新格式化为 someAsyncFunction(function () {console.log("function complete")} ); 这是我可以用正则表达式完成的任务,还是我需要编写解析器?如果是后者,对LIB有何建议 只是让

我需要一种机制,它将获取包含同步函数调用的相当小的javascript片段,并将其重写为异步javascript

例如,如果我有一个片段

someSyncFunction();
console.log("function complete")
我需要将它重新格式化为

someAsyncFunction(function () {console.log("function complete")} );
这是我可以用正则表达式完成的任务,还是我需要编写解析器?如果是后者,对LIB有何建议

只是让事情稍微复杂一点,我还需要处理递归/嵌套,例如

someSyncFunction();
console.log("first function complete");
someSyncFunction();
console.log("second function complete");
...

是的,您需要使用解析器。Regex不能真正解析任意嵌套的javascript代码。您可能希望使用它,它为您提供了一个语法树,您可以在其中找到异步函数并适当地转换树


然而,我不认为你会想重新发明轮子。看看这个。

谢谢你的建议。以下是结果

  • esprima肯定会完成这项工作,如果regex进入缓冲区,那就是我下一步要做的事情
  • 我在网站上查看了有用的编译器列表,但它们都给我想要实现的目标带来了沉重的负担。卡尔离得最近
  • 从@Avinash的建议开始,我发现regex做我想做的事情非常简单,所以我会这么做。为了澄清,regex at将处理sync->async转换的单个实例,因此我将递归调用它,直到输出稳定为止

您需要更改多少javascript?如果可能的话,我建议手动执行此操作,因为我认为解析/或使用regexp可能会非常复杂。代码段最多有10行左右,不包括任何函数定义。我假设您有不同的同步函数?每个片段都不同于其他片段?我有点像恐龙,所以我可能会坚持在一个像样的文本编辑器中使用find和replace,再加上手动整理。通过使用esprima解析和重写,这很容易做到。或者你可以看看sweet.js,一个宏预处理器。@pinoyid你是说这个吗?