AS3:循环中的RegExp exec方法问题

AS3:循环中的RegExp exec方法问题,regex,actionscript-3,loops,Regex,Actionscript 3,Loops,我需要一些关于AS3中RegExp的帮助 我有一个简单的模式: patternYouTube = new RegExp ( "v(?:\/|=)([A-Z0-9_-]+)", "gi" ); 此模式正在查找youTube id视频 例如: var tmpUrl : String; var result : Object; var toto : Array = new Array(); toto = ["http://www.youtube.com/v/J-vCxmjCm-8&a

我需要一些关于AS3中RegExp的帮助

我有一个简单的模式:

patternYouTube = new RegExp ( "v(?:\/|=)([A-Z0-9_-]+)", "gi" );
此模式正在查找youTube id视频

例如:

var tmpUrl : String;    
var result : Object;
var toto : Array = new Array();
toto = ["http://www.youtube.com/v/J-vCxmjCm-8&autoplay=1", "http://www.youtube.com/v/xFTRnE1WBmU&autoplay=1"];
var i : uint;

for ( i = 0 ; i < toto.length ; i++)
{
     tmpUrl = toto[i];
     result = patternYouTube.exec ( tmpUrl );
     if ( result.length != 0 && result != null )
     {
         trace(result);
     }
}
当i==0时,它工作正常: Flash返回我:
xFTRnE1WBmU

当i==1时,它失败: Flash返回我:
null


你知道循环中的问题吗?

这就是
g
​lobal regexp在JavaScript/ActionScript中执行。您将
exec
它们执行一次,您将获得第一个匹配项,
exec
再次执行它们并获得第二个匹配项。使用
g
RegExp,您必须再次调用它,直到完成所有匹配。然后您将得到
null
,搜索将重置为字符串的开头


这是一个奇怪的界面,但这正是我们要面对的。如果不希望出现这种行为,请从
newregexp
构造函数中省略
'g'
标志。然后每次只会得到第一个匹配项。

bobince完全正确,但也可以在调用exec()之前将lastIndex属性设置为0


现在你也可以吃你的g旗蛋糕了。。。或者呃,嗯,像这样的

我不太确定,但是数组声明中的“缺失”不是吗?你完全正确!谢谢你的帮助。现在我开始理解“g”标志了,谢谢你。
toto = [ http://www.youtube.com/v/xFTRnE1WBmU&autoplay=1, http://www.youtube.com/v/J-vCxmjCm-8&autoplay=1 ];
patternYouTube.lastIndex = 0;