2011-04-18 32 views
1

任何人都可以解释为什么下面的代码在时间轴上跟踪null?AS3 RegEx返回null

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

我读过的文件,所以我敢肯定,我是正确的声明和正则表达式时,无图案传递在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

这是文件中的错误,我已经在这里提交//错误。 adobe.com/jira/browse/FLEXDOCS-1363 – Borek 2011-05-16 11:15:04

回答

5

UPDATE

如果你打算用正则表达式工作,这个工具是必备的:

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

原来的答案

不要使用的toString(),你然后做一个文字搜索,这将包括所有除您正则表达式的格式,包括标志。不要:

str.match(cleanRegExp); 

其实正确的方法是引用返回的对象,像这样:HTTPS:

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

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

另外我相信在regex选项上运行exec()命令实际上更快,它可以给你更多的结果数据,而不仅仅是一个匹配数组。 – 2011-04-18 12:00:54

+0

你能看看我发布的修改吗?我删除toString(),但仍然得到一个null,这应该只发生在没有任何模式通过。 – shanethehat 2011-04-18 12:04:07

+0

与exec()相同,表达式有明显的错误吗? – shanethehat 2011-04-18 12:11:28