2017-08-16 35 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