我需要一些有关 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 时,它完美地工作。
闪回我:
v/J-vCxmjCm-8,J-vCxmjCm-8
当 i == 1 时,它失败。
闪回我:
null
当我恢复数组中的两个字符串时,例如:
toto = [ http://www.youtube.com/v/xFTRnE1WBmU&autoplay=1, http://www.youtube.com/v/J-vCxmjCm-8&autoplay=1 ];
当 i == 0 时,它完美运行:
闪回我:
xFTRnE1WBmU
当 i == 1 时,它失败:
闪回我:
null
你对循环中的问题有什么想法吗?
最佳答案
就是这样g
局部正则表达式在 JavaScript/ActionScript 中执行。您exec
他们一次,你得到第一场比赛,exec
他们再次获得第二场比赛。带 g
RegExp 您必须再次调用它,直到您完成所有匹配项。然后你会得到null
并且搜索将重置为字符串的开头。
这是一个奇怪的界面,但这就是我们所坚持的。如果您不想要这种行为,请省略 'g'
来自 new RegExp
的旗帜构造函数。那么你每次只会得到第一场比赛。
关于regex - AS3 : RegExp exec method in loop problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455867/