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

时间:2010-03-16 15:50:47

标签: 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&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返回给我:v/J-vCxmjCm-8,J-vCxmjCm-8

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

当我恢复数组中的两个字符串时,例如:

toto = [ http://www.youtube.com/v/xFTRnE1WBmU&autoplay=1, http://www.youtube.com/v/J-vCxmjCm-8&autoplay=1 ];

当i == 0时,它完美地运作: Flash返回给我:xFTRnE1WBmU

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

你对循环中的问题有什么想法吗?

2 个答案:

答案 0 :(得分:5)

这是g一些Regal在JavaScript / ActionScript中的作用。您exec他们一次,您获得第一场比赛,再次exec他们获得第二场比赛。使用g RegExp,您必须再次调用它,直到您完成所有匹配。然后你会得到null,搜索将重置为字符串的开头。

这是一个奇怪的界面,但这就是我们所坚持的。如果您不想要此行为,请忽略'g'构造函数中的new RegExp标志。然后你每次都只得到第一场比赛。

答案 1 :(得分:3)

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

patternYouTube.lastIndex = 0;

现在你可以吃你的g旗蛋糕,也可以吃它......或者呃,这样的话......