在 AS3 RegEx 中访问捕获组
Accessing capture groups in 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 方法,您可以针对特定的捕获组,但我没有看到将它们拉出以在其他地方使用它们的方法。谢谢
我建议在模式中使用惰性匹配 .*?
以免过度匹配(*?
量词称为惰性并且只会匹配尽可能少的量化子模式) ,并获取所有出现的捕获值,您可以使用 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);
}
另请注意,在使用 static 正则表达式模式(即不使用变量来构建它)时,您不必使用 RegExp 构造函数表示法,使用简单的 /.../
正则表达式文字符号。
我有一个如下所示的文档:
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 方法,您可以针对特定的捕获组,但我没有看到将它们拉出以在其他地方使用它们的方法。谢谢
我建议在模式中使用惰性匹配 .*?
以免过度匹配(*?
量词称为惰性并且只会匹配尽可能少的量化子模式) ,并获取所有出现的捕获值,您可以使用 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);
}
另请注意,在使用 static 正则表达式模式(即不使用变量来构建它)时,您不必使用 RegExp 构造函数表示法,使用简单的 /.../
正则表达式文字符号。