AS3:循环中的RegExp exec方法问题
我需要一些关于AS3中RegExp的帮助 我有一个简单的模式: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
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;