2016-11-02 10 views
1

У меня есть документ, который выглядит следующим образом:Доступ групп захвата в 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 Ethernet» и т.д.) и сохраните их в другом массиве. У меня есть регулярное выражение, которое выглядит как этот

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

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

+1

Используйте 'm = colorsRegEx.exec (string)' в цикле и получите доступ к значению 'm [1]'. –

+0

Отлично! Спасибо, Виктор! – Surgery

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^