我需要一些关于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
你对循环中的问题有什么想法吗?
这就是g
快速RegExps在JavaScript/ActionScript中所做的事情.你exec
有一次,你得到第一场比赛,exec
他们再次得到第二场比赛.使用g
RegExp,您必须再次调用它,直到您完成所有匹配.然后你会得到null
,搜索将重置为字符串的开头.
这是一个奇怪的界面,但这就是我们所坚持的.如果您不想要此行为,请忽略构造函数中的'g'
标志new RegExp
.那么每次你只会得到第一场比赛.