2017-08-16 10 views
0

私はcoをノードのアプリケーションとパッケージに広く使用しています。それらのいくつかは、regexを使ってasync /可能なら。`co(function * ...)`を `async function ... 'に置き換えるための正規表現

yieldは、単にawaitと置き換えられています。正規表現の部分はco(function *...)で、async function ...に置き換えてください。...はそのままです。

最後に)は機能の中に他の多くの)があるので、難しい部分です。正規表現は、(をチェックし、)が見つからなくなるまで、次の)を無視する必要があります。

簡単なハックは(async functionco(function *を交換するだろうが、その後私はまだ多くの場所でasync ...(async ...)を交換する必要があるだろう、と私はその最後の)に取り組むするかどうかはわかりません。

私は、正規表現のエキスパートがこのような些細な事を知っていると確信しています。誰もがasync/awaitにアップグレードするのに役立ちます!

+0

いいえ、 '... '部分はまったく重要ではありません。そして、正規表現よりもjavascriptパーサーでこれを解決する方がずっと良いでしょう。たとえば探してみてください。これを行うことができるバベルプラグイン、または独自のプラグインを作成します。 – Bergi

+0

ペアなしで最初の ')'を取得し、中間のテキストをキャプチャする方法がない場合は、プログラム的なアプローチに進む必要があります。他の解決策がない場合は、パッケージを作成してここに戻すこともできます。 – Kesarion

答えて

1

私はこの作業のためにpackageを作りました。

インストール:

npm i co-async-migrate -g 

ラン:それは、ディレクトリ内のすべてのファイルに/非同期との共同/歩留まり置き換える待つ必要があります

co-async-migrate /path/to/dir 

0

否定的な先読みを使用して最後の ')'を保持することができます。この正規表現で

ルック: 『末端は』最後を除外するために否定先読みである一方、

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

グループの体は ' 『)』(「...」として示されている)あなたの関数本体と一致する必要があります。

これはテストです:https://regex101.com/r/tVQHEX/2/

+0

最後の ')'を削除する必要があります。 – Kesarion

関連する問題