我需要一些关于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
你对循环中的问题有什么想法吗?
答案 0 :(得分:5)
这是g
一些Regal在JavaScript / ActionScript中的作用。您exec
他们一次,您获得第一场比赛,再次exec
他们获得第二场比赛。使用g
RegExp,您必须再次调用它,直到您完成所有匹配。然后你会得到null
,搜索将重置为字符串的开头。
这是一个奇怪的界面,但这就是我们所坚持的。如果您不想要此行为,请忽略'g'
构造函数中的new RegExp
标志。然后你每次都只得到第一场比赛。
答案 1 :(得分:3)
bobince是完全正确的,但你也可以在调用exec()之前将lastIndex属性设置为0。
patternYouTube.lastIndex = 0;
现在你可以吃你的g旗蛋糕,也可以吃它......或者呃,这样的话......