2012-04-26 84 views
1

我正在尋找在Javascript中的正則表達式將匹配在一個字符串像正則表達式找到一提

@Mr. Smith Hello !

,其中史密斯先生是用戶的名稱,事件

Mr.Mr. SmithMr. Smith HelloMr. Smith Hello !

現在,我想盡正則表達式返回

@Mr. Smith Hello !Mr. Smith Hello !

而忽視Mr.Mr. SmithMr. Smith Hello ...

我已經試過這樣:

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

感謝您的幫助!

+1

告訴我們您的正則表達式的,你試過 – llamerr 2012-04-26 17:51:01

+0

我嘗試「/^@( 。*)/「,」/^@(.*)* /「和」/^@([^]。*)/「 – 2012-04-26 17:53:06

回答

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/

+0

謝謝,這完全是訣竅! – 2012-04-26 18:06:54