sha*_*hat 1 regex flash actionscript-3
任何人都可以解释为什么下面的代码在时间轴上跟踪null?
var cleanRegExp:RegExp = /^[a-zA-Z0-9]+(\b|\/)/;
var str:String = "/num83r5/and/letters/4/A/";
trace(str.match(cleanRegExp.toString()));
Run Code Online (Sandbox Code Playgroud)
我已经阅读了文档,所以我很确定我正确地声明了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);
Run Code Online (Sandbox Code Playgroud)
和:
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]);
Run Code Online (Sandbox Code Playgroud)
小智 5
UPDATE
如果你打算使用正则表达式在flash中工作,这个工具是必须的:
http://gskinner.com/RegExr/
http://gskinner.com/RegExr/desktop/
原始答案
不要使用toString(),然后进行文字搜索,其中包括添加所有正则表达式格式,包括标志.做:
str.match(cleanRegExp);
Run Code Online (Sandbox Code Playgroud)
实际上正确的方法是引用返回的对象,如下所示:
var results:Array = str.match(cleanRegExp);
if(results != null){
//We have a match!
}
Run Code Online (Sandbox Code Playgroud)