2017-03-23 14 views
2

私はすべてのJavaScript関数を1か月前にアルファベット順に並べるように整理したいと思っていましたが、今日は正規表現で再生していました。ネストされた関数が移動するのを避けるために外側の関数にマッチさせたいと思っています。すべてのjavascript関数に一致する正規表現

このページのbobble bubbleの回答を出発点として使用しました。 Regular Expression to match outer brackets

function\s.*\(.*\).*\{(?>[^.*\n*]+|(?R))*\} 

これは、すべての関数定義と一致し、最初の中括弧に引数をキャプチャします。なんらかの理由で、改行パターン[^.*\n*]+と一致するようにはできませんが、それは式の一部ですが、それだけではすべてうまく一致します。

私は検索のための私のツールとして崇高なテキストエディタを使用していましたが、JSファイルではおそらくコードを操作する簡単な方法になります。

+2

。順序はセマンティック駆動でなければなりません。とにかく、あなたがそれを正しく解決したいならば、JS構文パーサを取ると、100倍簡単で信頼性が高くなります。 – zerkms

+0

新しい行を探す必要があります。 '\ nfunction。*?\ n \}'これかもしれない... – Akxe

答えて

0

これは

function.*\(.*\).*\{(.|\n)*?\n\} 

それとも、体をキャッチしたくない場合は(追加の表現を必要とする1行で定義されたものを除く)私のためにすべての関数と自分の体と一致するように見えますただ?:

function.*\(.*\).*\{(?:.|\n)*?\n\} 

を追加するアイデアは、我々は新しい行と閉じ中括弧で終了するまで一致させることです。体内でこのようなしブラケット(または内部関数)がGoogleの検索と衝突します。

+0

好奇心の外に、なぜdownvote? – floribon

1

これを手にしたあと、jsファイルを分割してすべての名前付き関数に一致させ、関数名、引数、および本文に分解する正規表現があります。 Floribonのソリューションとは異なり、これはすべての書式設定スタイルに一致し、さらには縮小され、ネストされた中括弧と関数は無視されます。本当に---それはひどいアイデアだ、 "アルファベット順にそれらを置くために"

function\s+(?<functionName>\w+)\s*\((?<functionArguments>(?:[^()]+)*)?\s*\)\s*(?<functionBody>{(?:[^{}]+|(?-1))*+}) 

https://regex101.com/r/sXrHLI/1

関連する問題