JavaScript正则表达式帮助!

时间:2011-04-04 11:56:45

标签: javascript regex

我正在尝试匹配此字符串中的@标记:

 @sam @gt @channel:sam dfgfdh sam@sam

现在在正则表达式测试人员中,@[\S]+(使用JS测试设置)可以选出以@开头的所有字符串,所以我得到了:

@sam @gt @channel:sam @sam

但是在使用此代码的浏览器中:

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;
}

我只能获得@的一场比赛(如果我很幸运,通常不匹配)。

我必须在这里遗漏一些东西,我的眼睛已经看了很长时间,看不出它是什么。

有人能看出这个功能有什么问题吗?

谢谢,

2 个答案:

答案 0 :(得分:6)

你需要:

  • 使用全局搜索g设置
  • 逃避您的\
  • 使用match代替exec

    var e = new RegExp('@[\\S]+', 'gi');

    m = status.match(e);

答案 1 :(得分:1)

您需要反复调用exec,直到它返回null。每次它都会返回一个match对象,其中包含该匹配的所有捕获。

我冒昧地按照我写的方式重写你的功能:

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