2013-11-04 18 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