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