dougmacklin
dougmacklin

Reputation: 2610

Extracting Strings Into an Array Regex

I'm almost there! Just can't figure out the last part of what I need... forming the array.

I want to go through an html file and extract url's from between the phrases playVideo(' and ')

For testing purposes I am just trying to get it to work on the variable str, eventually this will be replaced by the html document:

<script type="text/javascript">
    var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')"; 

    var testRE = str.match("playVideo\\(\'(.*?)\'");

    alert(testRE[1]);
</script>

This will output 'url1' but if I change it to alert(testRE[2]) it is undefined. How can I get it to fill out the array with all of the URLs (eg testRE[2] output 'url2' and so on) ?

Thanks for any help, new to regex.

Upvotes: 3

Views: 1857

Answers (2)

David Clarke
David Clarke

Reputation: 13256

Normally a javascript regular expression will just perform the first match. Update your regular expression to add the g modifier. Unfortunately JavaScript regular expressions don't have a non-capturing group so you have to do a little more processing to extract the bit you want e.g.

<script type="text/javascript">
var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')"; 

var testRE = str.match(/playVideo\(\'[^']*\'/g);
var urls = [];
for (var i = 0; i < testRE.length; i++)
{
    urls[i] = testRE[i].substring(11).match(/[^']*/);
}

alert(urls[1]);
alert(urls[2]);
</script>

Upvotes: 2

Carl Krig
Carl Krig

Reputation: 181

Cannot comment, why is that, but adding that by iterating on the regex you get access to the groups;

var str ="playVideo('url1') BREAK playVideo('url2') BREAK playVideo('url3')";
var re = /playVideo\('(.*?)'\)/g;
while (match = re.exec(str)) {
    alert(match[1]);
}

Upvotes: 3

Related Questions