访问AS3 RegEx中的捕获组



我有一个文档,看起来像这样:

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"]。"是否有一种方法来抓取(.*)捕获组,所以我只有字典键?看起来好像你在使用字符串。替换方法,您可以针对特定的捕获组,但我没有看到将它们拉出来用于其他地方的方法。谢谢。

我建议在模式中使用惰性匹配.*?,以便不过度匹配(*?量词被称为惰性,并且只匹配尽可能少的量化子模式的出现),并捕获捕获值的所有出现,您可以使用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); 
}

还请注意,当使用静态 regex模式(即不使用变量来构建它)时,您不必使用RegExp构造函数表示法,使用简单的/.../ regex文字表示法。

最新更新