1

我正在寻找一个匹配的 Javascript 中的正则表达式,就像一个字符串

@Mr. Smith Hello !

,其中 Mr. Smith 是用户的姓名,出现次数

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

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

@Mr. Smith Hello !Mr. Smith Hello !,

而忽略Mr.Mr. SmithMr. Smith Hello...

我试过这个:

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

谢谢你的帮助 !

4

1 回答 1

3

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

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

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

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/

于 2012-04-26T18:01:05.590 回答