有人可以解释为什么下面的代码在时间轴上会跟踪为空吗?
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]);
答案 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!
}