2016-09-08 1 views
1

私は角度1.5クラスのすべての依存関係にマッチする正規表現を書こうとしています。これは結果でなければなりません角度正規分布に一致する注入

MyController.$inject = ['service1', 'service2', 'service3']; 

MyController 
    .$inject = [ 
     'service1', 
     'service2', 
     'service3', 
    ]; 

\$inject = \[('([\w]+)'([,]?[\s]?))* 

これはテストラインのカップルは何かということです。これは私がこれまでに得たものである

match = ['service1', 'service2', 'service3']; 

がしますが上記の私の正規表現最後の項目:service3を取得するだけで、理由はわかりません。誰でも助けることができますか? http://regexr.com/3e6c2

+0

[Esprima](http://esprima.org)を使用すると、正規表現より簡単にマッチングを行うことができます。 – rid

+0

私はこのパーサについて知らなかった。ありがとうございますが、私はこれを軽量にしたいと思います。このパーサーから取り上げたすべてのファイルをスローすると、このパーサーの結果セットを解釈するために実際のコードファイルを解釈する手間がかかります。私はこれが私が達成しようとしているものに価値をもたらすとは確信していません。 –

答えて

1

理由は、あなたがキャプチャグループを定量化する際に、最後のものだけがキャプチャされていることである。

アップデートはここで働く、それを手に入れました。 *でキャプチャグループを無制限に0回繰り返すことができます。それを動作させるには、それらを個別にキャプチャする必要があります。

説明のため、see this example at regex101です。ここでは、定量化を行う代わりにキャプチャグループを3回繰り返したので、3つのグループすべてがキャプチャを取得します。

私はまた、グループ内ノイズを避けるために、グループの一部非キャプチャ(?:...)を作りました。

これは、有限数のグループがある場合に機能します。グループの数が不明であるか大きい場合は、プログラムで解決する必要があります。

+0

未知のキャプチャグループのために、これを2つのステップで実行する必要がありますか? [と]の間にコンマ区切りのリストを取り込む方法はありません。 1つのステップで? –

+0

おそらく、代わりにこれを行う方が良いでしょう: '\ $ inject = \ [([a-zA-Z0-9 _、 '\ s] +)\]'は、全てを捕らえて、javascript replace何か... –

+0

私の知る限りではありません。しかし、私はちょっと混乱しています - あなたはすでに配列の結果を持っていますか?それとも、解析している文字列ですか? – ClasG