正则表达找到提及

时间:2012-04-26 17:48:04

标签: javascript regex

我在Javascript中寻找一个匹配的正则表达式,如

这样的字符串

@Mr. Smith Hello !

,其中史密斯先生是用户名,出现次数

Mr. Mr. Smith Mr. Smith Hello Mr. Smith Hello !

现在,我尝试的每个正则表达式都返回

@Mr. Smith Hello !Mr. Smith Hello !

忽略了Mr.Mr. SmithMr. Smith Hello ...

我试过这个:

/^@(.*) //^@(.*)* //^@([^ ].*) /

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

单个正则表达式不能将重叠文本作为单独的匹配返回,因为每个匹配都会占用部分输入文本。但是,您可以创建嵌套捕获组,如下所示(演示:http://www.rubular.com/r/bsu52a1eL9):

@(((([^ ]*) [^ ]*) [^ ]*) [^ ]*)

当然这只适用于您提供的确切字符串格式,正好有3个空格/ 4个单独的单词。更好的解决方案是使用substringsplit方法,然后您可以手动重新组合这些部分:

var input = "@Mr. Smith Hello !";
var parts = input.substring(1).split(' ');
//parts = ["Mr.","Smith","Hello","!"]
var temp = "";
var output = [];

for (var i = 0; i < parts.length; i++)
{
    if (temp != "") temp += " ";
    temp += parts[i];
    output[i] = temp;
}
//output = ["Mr.", "Mr. Smith", "Mr. Smith Hello", "Mr. Smith Hello !"]

演示:http://jsfiddle.net/jbk4h/