AS3 RegEx返回null

时间:2011-04-18 11:54:08

标签: regex flash actionscript-3

有人可以解释为什么下面的代码在时间轴上会跟踪为空吗?

var cleanRegExp:RegExp = /^[a-zA-Z0-9]+(\b|\/)/;
var str:String = "/num83r5/and/letters/4/A/";
trace(str.match(cleanRegExp.toString()));

我已经阅读了文档,因此我非常确定我正确地声明了RegEx并且String.match()只应在没有传入模式时返回null,否则它应该是一个0的数组+元素。我怀疑一个写得很糟糕的表达,但肯定还应该返回一个空数组?

编辑:这两个跟踪“无匹配”而不是5或0,具体取决于正确的表达式:

var cleanRegExp:RegExp = /^[a-zA-Z0-9]+(\b|\/)/;
var str:String = "/num83r5/and/letters/4/A/";
var res:Array = str.match(cleanRegExp);
trace((res == null) ? "no matches" : res.length);

var cleanRegExp:RegExp = /^[a-zA-Z0-9]+(\b|\/)/;
var str:String = "/num83r5/and/letters/4/A/";
var res:Object = cleanRegExp.exec(str);
trace((res == null) ? "no matches" : res[0]);

1 个答案:

答案 0 :(得分:5)

<强>更新

如果你打算使用正则表达式在flash中工作,这个工具是必须的:

http://gskinner.com/RegExr/
http://gskinner.com/RegExr/desktop/

原始回答

不要使用toString(),然后进行文字搜索,其中包括添加所有正则表达式格式,包括标志。做:

str.match(cleanRegExp);

实际上正确的方法是引用返回的对象,如下所示:

var results:Array = str.match(cleanRegExp);

if(results != null){
     //We have a match!
}