Reputation: 43884
I am trying to match a @ tags within this string:
@sam @gt @channel:sam dfgfdh sam@sam
Now in regex testers this works @[\S]+
(with settings on JS testing) to pick out all strings starting with @ so in them I get:
@sam @gt @channel:sam @sam
But then in browsers using this code:
function detect_extractStatusUsers(status){
var e = new RegExp('@[\S]+', 'i');
m = e.exec(status);
var s= "";
if (m != null) {
for (i = 0; i < m.length; i++) {
s = s + m[i] + "\n";
}
alert(s);
}
return true;
}
I can only get one single match of @
(if I'm lucky, normally no match).
I must be missing something here and my eyes have just been looking at this for too long to see what it is.
Can anyone see what's wrong in this function?
Thanks,
Upvotes: 3
Views: 99
Reputation: 13622
You need to call exec
repeatedly, until it returns null
. Each time it will return a match
object, containing all the captures for that match.
I've taken the liberty of rewriting your function the way I would have written it:
function detect_extractStatusUsers(status){
var rx = /(@[\S]+)/gi,
match,
tags = [];
while (match = e.exec(status)) {
tags.push(match[1]);
}
if (tags.length > 0) {
alert(tags.join('\n'));
}
}
Upvotes: 1
Reputation: 50177
You need to:
g
settinguse match
instead of exec
var e = new RegExp('@[\\S]+', 'gi');
m = status.match(e);
Upvotes: 6