我正在尝试匹配此字符串中的@标记:
@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;
}
我只能获得@
的一场比赛(如果我很幸运,通常不匹配)。
我必须在这里遗漏一些东西,我的眼睛已经看了很长时间,看不出它是什么。
有人能看出这个功能有什么问题吗?
谢谢,
答案 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'));
}
}