2011-04-04 66 views
3

我想匹配这个字符串中的@标签:JavaScript正则表达式帮助!

@sam @gt @channel:sam dfgfdh [email protected] 

现在正则表达式测试这个作品@[\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; 
} 

我只能得到一个@单场(如果我很幸运,通常没有匹配)。

我必须在这里失去一些东西,我的眼睛已经看了太久,看不到它是什么。

任何人都可以看到这个函数有什么问题吗?

感谢,

回答

6

您需要:

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

    ​​

    m = status.match(e);

+0

嗯,它不工作,但它仍然只能从@sam挑选出@s拨打的确切功能(与添加g标志),如:'detect_extractStatusUsers(“@ sam”);' – Sammaye 2011-04-04 12:05:44

+0

我更新了我的答案,解决您的功能中的其他问题。 – mVChr 2011-04-04 12:12:57

+0

呜呜呜,我知道这很简单。满分:D – Sammaye 2011-04-04 12:28:28

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