访问AS3 RegEx中的捕获组

时间:2016-11-02 14:19:49

标签: regex actionscript-3 capture-group

我有一个看起来像这样的文件:

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的键(即“直接布线”,“10Base2以太网”等)并将它们存储在另一个阵列中。我有一个看起来像这样的正则表达式

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

这匹配整个,例如“colorArray [”DIRECT CABLING“]。”有没有办法只抓住(。*)捕获组,所以我只有字典键?看起来如果你使用String.replace方法,你可以定位特定的捕获组,但我没有看到一种方法将它们拉出去在其他地方使用它们。感谢。

1 个答案:

答案 0 :(得分: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构造函数表示法,请使用简单的/.../正则表达式文字表示法