I need some help about RegExp in AS3.
I have a simple pattern :
patternYouTube = new RegExp ( "v(?:\/|=)([A-Z0-9_-]+)", "gi" );
This pattern is looking for the youTube id video.
For example :
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);
}
}
When i == 0, it works perfectly.
Flash returns me : v/J-vCxmjCm-8,J-vCxmjCm-8
When i == 1, it fails.
Flash returns me : null
When I revert the two strings in my array such as :
toto = [ http://www.youtube.com/v/xFTRnE1WBmU&autoplay=1, http://www.youtube.com/v/J-vCxmjCm-8&autoplay=1 ];
When i == 0, it works perfectly :
Flash returns me : xFTRnE1WBmU
When i == 1, it fails :
Flash returns me : null
Do you have any idea about the problem in the loop ?
That's what g
lobal RegExps do in JavaScript/ActionScript. You exec
them once, you get the first match, exec
them again and get the second match. With a g
RegExp you have to keep calling it again until you've got through all the matches. Then you'll get null
and the search will reset to the start of the string.
It's a weird interface, but that's what we're stuck with. If you don't want this behaviour, omit the 'g'
flag from the new RegExp
constructor. Then you'll get only the first match, every time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With