2017-09-27 21 views
0

私はRegExを使い始めます。とにかく私は自分のベストを試してみましたが、私はかなり遠くなったと思いますが、私は私が持っている正確には何がまだ...RegEx関数の名前と文字列のパラメータを変更

ないよ: 私はNode.js.で処理する必要がJavaScriptのソースファイルそのように見ることができます:

var str = "require(test < 123)\n\nrequire(test2 !== test)\n\nfunction(dontReplaceThisParam) {\n console.log(dontReplaceThisParam)\n}"; 

私が思い付いた:いくつかの問題をTheresの

console.log(str.replace(/\(\s*([^)].+?)\s*\)/g, 'Debug$&, \'error_1\'')) 

  1. 私は、文字列のエラーがparanthesis内部に入ったことをしたいですそれは第2のパラメータとして働く。
  2. すべての関数呼び出し、または私はparanthesisのすべてが置き換えられると思います。しかし、 "require(xxx)"への関数呼び出しだけに触れてください。
  3. 可能な場合にも、エラーコードが何らかの形でインクリメントする必要があり...

だから、 "必要(テスト== 123)" のような文字列は、「requireDebug(テスト== 123 'error_N')に変換する必要があります

requireDebug(test < 123), 'error_1' 

requireDebug(test2 !== test), 'error_1' 

functionDebug(dontReplaceThisParam), 'error_1' { 
    console.logDebug(dontReplaceThisParam), 'error_1' 
} 

私は必要なもの:

... "現在、私のコードが出力します何

を必要とする」だけの呼び出し"

requireDebug(test < 123, 'error_1') requireDebug(test2 !== test, 'error_2') function(dontReplaceThisParam) { console.log(dontReplaceThisParam) } 

私はこれを手動で行うことができますが、ここでは数百のソースファイルについて話しています。私はまた、このようなことはあまり良いことではないことを知っていますが、require関数内のデバッガが動作していないので、エラーを見つけるためにエラーコードで自分のデバッグ関数を作る必要があります。そのほとんどすべて私が今できること...

何か助けてくれてありがとうございます!

答えて

1

requireで正規表現を開始し、インクリメントカウンタが必要なので、2番目の引数として関数をreplaceに渡します。これにより、一致ごとにカウンタをインクリメントして挿入することができます。それ以外

var str = "require(test < 123)\n\nrequire(test2 !== test)\n\nfunction(dontReplaceThisParam) {\n console.log(dontReplaceThisParam)\n}"; 
 
var counter = 0; 
 

 
console.log(str.replace(/require\(\s*([^)].+?)\s*\)/g, (s, g2) => 
 
    `requireDebug(${g2}, \'error_${++counter}\')` 
 
));

、あなたのコードは変化しませんでした。

+0

聖なる牛!あなたはこれをとても簡単に見える*恥ずかしい*ありがとう! –

+0

あなたは大歓迎ですが、大部分の正規表現を書いたので簡単でした。私はちょうど単語を追加しました。 :) – llama