开发者

JavaScript Regex Help!

开发者 https://www.devze.com 2023-02-22 02:15 出处:网络
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 @

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 of exec

    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'));
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消