Regex AS3正则表达式返回null

Regex AS3正则表达式返回null,regex,flash,actionscript-3,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+元素的数组。我怀疑是一个写得不

有人能解释为什么下面的代码在时间线上跟踪空值吗

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);
以及:

更新

如果要在flash中使用regex,此工具是必备的:

原始答案

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

str.match(cleanRegExp);
实际上,正确的方法是引用返回的对象,如下所示:

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

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

如果要在flash中使用regex,此工具是必备的:

原始答案

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

str.match(cleanRegExp);
实际上,正确的方法是引用返回的对象,如下所示:

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

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

另外,我相信在regex选项上运行exec命令实际上更快,它可以为您提供更多的结果数据,而不仅仅是一个匹配数组?我删除了toString,但仍然得到一个null,这应该只在没有传递任何模式时发生。与exec一样,表达式是否有明显的错误?flash文档是错误的。如果不匹配,则会得到一个空对象。我刚刚测试了你的第二个示例,它不匹配,因为你有^symbol,这意味着它必须是行的开头,然后是一个数字或任意大小写的字母。这在你的例子中并不存在。摘下帽子,它工作正常并跟踪结果。要回答您的问题,是的,表达式的格式有问题。用修正表达式测试的代码运行良好。检查我的更新答案你需要安装regexr并使用它来编写你的regex,它是一个实时的regex编辑器。另外,我相信在regex选项上运行exec命令实际上更快,它可以为你提供更多的结果数据,而不仅仅是一个匹配数组。你能看看我发布的编辑吗?我删除了toString,但仍然得到一个null,这应该只在没有传递任何模式时发生。与exec一样,表达式是否有明显的错误?flash文档是错误的。如果不匹配,则会得到一个空对象。我刚刚测试了你的第二个示例,它不匹配,因为你有^symbol,这意味着它必须是行的开头,然后是一个数字或任意大小写的字母。这在你的例子中并不存在。摘下帽子,它工作正常并跟踪结果。要回答您的问题,是的,表达式的格式有问题。用修正表达式测试的代码运行良好。检查我的更新答案你需要安装regexr并使用它来编写你的regex它是一个实时的regex编辑器。它是文档中的一个bug,我在这里存档:它是文档中的一个bug,我在这里存档: