this is the code I am trying :
var arr = [];
var str = "hey check this video out! youtube/watch?v=123456 and there is some other text youtube/watch?v=3t_3456 and some more.";
while (match = /youtube\\/watch\?v=([^\s]+)/.exec(str)) {
arr.push(match[1]);
}
console.log(arr);
it should capture the last part of the url's and push them to an array.
the array I am expecting is :
["123456", "3t_3456"]
but this code is going in an infinite loop, what's wrong with it ?
this is the code I am trying :
var arr = [];
var str = "hey check this video out! youtube./watch?v=123456 and there is some other text youtube./watch?v=3t_3456 and some more.";
while (match = /youtube\.\/watch\?v=([^\s]+)/.exec(str)) {
arr.push(match[1]);
}
console.log(arr);
it should capture the last part of the url's and push them to an array.
the array I am expecting is :
["123456", "3t_3456"]
but this code is going in an infinite loop, what's wrong with it ?
Share Improve this question asked May 21, 2014 at 6:10 aeloraelor 11.1k3 gold badges34 silver badges48 bronze badges 3-
2
You have a
while
loop performing the same action over and over with nothing changing its condition. You need to modifystr
or it will just keep checking the same string over and over. – JLRishe Commented May 21, 2014 at 6:15 - but I took the code from stackoverflow./questions/432493/… – aelor Commented May 21, 2014 at 6:17
- @JLRishe what should be the possible solution to my problem – aelor Commented May 21, 2014 at 6:17
2 Answers
Reset to default 7The difference between your code and the page you linked to is:
- You are creating a new regex on every iteration of the loop, so it is not maintaining a record of the previous matches.
- You are not using the
g
(global) flag, so even if you were not creating new regexes, it would just keep finding the first match.
You need to reuse the same regex, and use the g
flag:
var pattern = /youtube\.\/watch\?v=([^\s]+)/g;
while (match = pattern.exec(str)) {
arr.push(match[1]);
}
You are inviting an infinite loop without using the global flag in your regex.
var arr = [];
var str = "hey check this video out! youtube./watch?v=123456 and there is some other text youtube./watch?v=3t_3456 and some more.";
var re = /youtube\.\/watch\?v=([^\s]+)/g;
while (match = re.exec(str)) {
arr.push(match[1]);
}
console.log(arr);
See a working example here.
Without the g
flag you'd run into an infinite loop, see here (WARNING: Clicking this link may crash your browser.).