我在Javascript中寻找一个匹配的正则表达式,如
这样的字符串 @Mr. Smith Hello !
,其中史密斯先生是用户名,出现次数
Mr.
Mr. Smith
Mr. Smith Hello
Mr. Smith Hello !
现在,我尝试的每个正则表达式都返回
@Mr. Smith Hello !
和Mr. Smith Hello !
,
忽略了Mr.
,Mr. Smith
和Mr. Smith Hello
...
我试过这个:
/^@(.*) /
,/^@(.*)* /
和/^@([^ ].*) /
感谢您的帮助!
答案 0 :(得分:3)
单个正则表达式不能将重叠文本作为单独的匹配返回,因为每个匹配都会占用部分输入文本。但是,您可以创建嵌套捕获组,如下所示(演示:http://www.rubular.com/r/bsu52a1eL9):
@(((([^ ]*) [^ ]*) [^ ]*) [^ ]*)
当然这只适用于您提供的确切字符串格式,正好有3个空格/ 4个单独的单词。更好的解决方案是使用substring
和split
方法,然后您可以手动重新组合这些部分:
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 !"]