2013-11-04 31 views
2

我有這樣的語句之後:正則表達式:拆分爲下一個新行字

等等
等等
約翰這樣做
等等
等等
約翰這樣做

我需要將這段文本拆分到行結尾的換行符t帽子從約翰開始。 John之後的文本並不一致,但最後一行總是以John開頭。將它拆分爲'John'很簡單,我只是不知道該怎麼說'在John'之後的下一個換行符處分裂。

.split(/(.*?John*?\n)+/g) 

以上分裂與約翰成爲它自己的條目,當我希望它留在上面的東西。

編輯

輸出應該是:


(等等
等等
約翰這樣做)(等等
等等
約翰這樣做)
(等..

括號表示拆分邊界/單個數組條目。

+1

什麼是您預期的輸出? – anubhava

+1

請發佈期望的結果,因爲如果沒有它,很難提供幫助 – abc123

+0

@anubhava - 已編輯的帖子。 –

回答

1

我認爲它會爲你工作:

.split(/.+John.+\n/g) 

.任何元素

+ 1次或多次

John

.+任何元素1噸礦石多次

\n新生線

g全球。不停止在第一次分裂。

編輯

有了這個:.split(/(.*?John*?\n)+/g),你匹配:

.*任何元素0礦石多次

John*?約翰0礦石多次。 ?在這裏沒有意義。

\n新線

因此,約翰,或新的生產線後,再次,這是不符合任何東西,但約翰。

1

這應該工作:

s = "blah\n" + 
"blah\n" + 
"John did this\n" + 
"blah\n" + 
"blah\n" + 
"John did that"; 

m = s.match(/[\s\S]*?\bJohn\b[^\n]*/g); 

console.log(m); 

OUTPUT:

["blah 
blah 
John did this", " 
blah 
blah 
John did that"] 
0

這是我會怎麼做:

var splitted = text.match(/[^]+?John.+\n/g); 
  • [^]+?→任意字符(但在至少一個字符)不願意讓不消耗約翰
  • .+\n→在同一條線上的每個字符約翰

由於@anubhava建議您可以使用[\s\S]任何字符,再加上環繞約翰與\b如果你不這樣做的正則表達式分割,例如Jonhy。如果要匹配空字符串,請將+替換爲*,如果您不想包含新行,則只需使用[^\n]+(除新行之外的所有字符)。


Working Fiddle