1

いくつかの js ファイル (ExtJS) を解析し、そのファイル内のクラスで使用されるすべての依存関係を見つけようとしています。

サンプルの js ファイルは次のようになります。

Ext.define('Pandora.controller.Station', {
    extend: 'Ext.app.Controller',

    refs: [{
        ref: 'stationsList',
        selector: 'stationslist'
    }],

    stores: ['Stations', 'RecentSongs'],
    ...

私が取得したいのは ですExt.app.Controller

私のコードでは、次を含むすべての行を取得できますextend

public void ReadAndFilter(string path)
{
    using (var reader = new StreamReader(path))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            if (line.Contains("extend"))
            {
                listBox2.Items.Add(line);
            }
        }
    }
}

しかし、これはコメントやその他の不要なものも返します。私の考えは、正規表現を使用してすべての文字列を見つけることでした。

私の問題は、行の前後にスペースがある場合があることです。
js ファイルに含まれるサンプルを次に示します。

extend          : 'Ext.AbstractPlugin',
extend: 'Ext.util.Observable',
@extends Sch.feature.AbstractTimeSpan
extend      : "Sch.feature.AbstractTimeSpan",
extend              : "Sch.plugin.Lines",
extend : "Sch.util.DragTracker",

これに対して RegEx を実行すると、以下が返されます。

Ext.AbstractPlugin
Ext.util.Observable
Sch.feature.AbstractTimeSpan
Sch.plugin.Lines
Sch.util.DragTracker

ここに私の試みがあります: 、ここextend[ ]*:[ ]*['"][a-zA-Z.]*['"]でテストしましたが、引用符または二重引用符の間の部分のみを取得したい (これも検証できますか?最初の引用符と 2 番目の二重引用符を持つものを除外できるようにするため)。

正規表現はおそらく最速ではありませんが、他にどのようにそれを行うことができるかわかりません。
どんなアドバイスも大歓迎です。

4

3 に答える 3

2

キャプチャ グループが不足しているだけです。括弧に注意してください[a-zA-Z.]*

extend([ ]*):[ ]*['"]([a-zA-Z.]*)['"]

これを実装するには、次を試してください。

var result = from Match match in Regex.Matches(line, "extend([ ]*):[ ]*['"]([a-zA-Z.]*)['"]") 
         select match.ToString();
于 2013-09-30T19:43:45.400 に答える