1

次のようなドキュメントがあります。

public class FunctionalColors {

    private static var colorArray:Array = new Array();

    public function FunctionalColors(e:Enforcer) {

    }

    public static function get colors():Array {
        if (colorArray.length == 0) {
            colorArray["DIRECT CABLING"] = 0x61568F;
            colorArray["10Base2 ETHERNET"] = 0x37699B;
            colorArray["10BaseT ETHERNET"] = 0x6699FF;
            colorArray["1 Gb Ethernet"] = 0x4169FF;
            colorArray["10 Gb Ethernet"] = 0x00CDD0;
        }

        return colorArray;
    }
}

colorArray のキー (つまり、"Direct Cabling"、"10Base2 Ethernet" など) を取り出して、別の配列に格納する必要があります。私はこのような正規表現を持っています

var colorsRegEx:RegExp = new RegExp(/colorArray\[\"(.*)\"\]/g);

これは、たとえば、「colorArray["DIRECT CABLING"].」の全体に一致します。(.*) キャプチャ グループだけを取得して、辞書キーだけを取得する方法はありますか? String.replace メソッドを使用している場合、特定のキャプチャ グループをターゲットにできるように見えますが、それらを引き出して他の場所で使用する方法は見当たりません。ありがとう。

4

1 に答える 1

2

.*?オーバーマッチしないように、パターン内でレイジー マッチングを使用することをお勧めします(*?量指定子はレイジーと呼ばれ、量化されたサブパターンのできるだけ少ない出現のみに一致します)。キャプチャされた値のすべての出現を取得するには、while内部でループしre.exec、一致しないまで呼び出します。

var pattern:RegExp = /colorArray\["(.*?)"]/g; 
var str:String = "<<YOUR_STRING_HERE>>"; 
var result:Array = [];
var m:Array = pattern.exec(str); 
while (m != null) 
{ 
    result.push(m[1]);
    m = pattern.exec(str); 
}

また、静的正規表現パターンを使用する場合 (つまり、ビルドに変数を使用しない場合) は、RegExp コンストラクター表記を使用する必要がないことに注意してください。単純な/.../正規表現リテラル表記を使用してください。

于 2016-11-02T15:03:46.600 に答える