Доступ к группам захвата в 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 (то есть "Direct Cabling", "10Base2 Ethernet" и т. Д.) И сохранить их в другом массиве. У меня есть регулярное выражение, которое выглядит так

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

Это полностью соответствует, например, "colorArray["DIRECT CABLING"]." Есть ли способ получить только группу захвата (.*), Чтобы у меня был только словарный ключ? Похоже, что если вы используете метод String.replace, вы можете нацеливаться на определенные группы захвата, но я не вижу способа вытащить их для использования в другом месте. Благодарю.

1 ответ

Решение

Я бы посоветовал использовать ленивое соответствие .*? в шаблоне, чтобы не превышать (*? квантификатор называется ленивым и будет соответствовать как можно меньшему количеству вхождений квантифицированного подшаблона), и чтобы захватить все вхождения захваченных значений, вы можете использовать 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 при использовании статического шаблона регулярных выражений (т.е. без использования переменных для его построения), используйте простое /.../ регулярное выражение буквенное обозначение.

Другие вопросы по тегам