2017-08-16 37 views
0

我在节点应用程序和包中广泛使用了co,我想用async/await使用正则表达式更新其中的一些,如果可能的话。正则表达式用`异步函数...'代替`co(函数* ...)``

来自co的yield只是一个简单的替换await。正则表达式部分带有co(function *...),应该替换为async function ......保持不变。

最后的)是棘手的部分,因为在函数内部会有很多其他的)。正则表达式将不得不检查(并忽略下一个),直到找到没有一对的)

一个简单的黑客将与(async function更换co(function *,但后来我还是需要在很多地方,以取代(async ...)async ...,我不知道如何解决,去年)

我敢肯定,一个正则表达式专家会发现这个微不足道的,它会有利于每个人升级到异步/等待!

+0

不,“......”部分绝对不平凡。通过JavaScript解析器解决这个问题比使用正则表达式更好。尝试寻找例如一个能够做到这一点的巴贝尔插件,或者写你自己的。 – Bergi

+0

如果没有办法让第一个'''没有一对并捕获中间文本,那么我将不得不采取一种程序化的方法。如果没有其他解决方案,我可能会将其打包并将其发回。 – Kesarion

回答

1

我为这个任务做了一个package

安装:

npm i co-async-migrate -g 

运行:

co-async-migrate /path/to/dir 

就应更换CO /产量与异步/在目录中的所有文件等待。

0

您可以使用负向前视来保留最后的')'。

看看这个表达式:

(?<S>(?<co>co\()(?<f>\w+)(?<S3> \*)(?<body>.+(?=(?<end>[)]+)))) 

组“体”应与你的函数体(表示为“...”),而‘端’为负先行排除最后的‘)’ 。

这是一个测试:https://regex101.com/r/tVQHEX/2/

+0

虽然它必须删除最后的')'。 – Kesarion