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 开发者_如何学Pythonthis function?
Thanks,
You need to:
- use the global search
g
setting - escape your \
use
match
instead ofexec
var e = new RegExp('@[\\S]+', 'gi');
m = status.match(e);
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'));
}
}
精彩评论