我有这样的陈述:
嗒嗒
等等
约翰这样做了 等等
等等
约翰做到了这一点 等
我需要在以John开头的行末尾的换行符处拆分此文本。约翰之后的文本不一致,但最后一行总是以约翰开头。将它拆分为“约翰”很容易,我只是不知道如何说“在约翰这个词之后在下一个换行符处拆分”。
.split(/(.*?John*?\n)+/g)
如果我想让它留在上面的东西上面,那么上面就会把它分开,约翰成为它自己的条目。
修改的
输出应为:
(嗒嗒
等等
约翰这样做了) (废话
等等
约翰这样做了) (等...
括号表示分割边界/单个数组条目。
答案 0 :(得分:1)
我认为它适合你:
.split(/.+John.+\n/g)
.
任何元素
+
一次或多次
John
.+
任何元素1次以上
\n
新行
g
。不要停留在第一次拆分。
修改的
使用此.split(/(.*?John*?\n)+/g)
,您正在匹配:
.*
任何元素0次以上
John*?
John 0次以上。 ?
在这里没有意义。
\n
新行
所以除了约翰或新线后,约翰不再匹配任何东西。
答案 1 :(得分: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);
<强>输出:强>
["blah
blah
John did this", "
blah
blah
John did that"]
答案 2 :(得分:0)
我就是这样做的:
var splitted = text.match(/[^]+?John.+\n/g);
[^]+?
→任何字符(但至少有一个字符)不情愿,以免它消耗约翰.+\n
→与John 正如@anubhava建议你可以对任何角色使用[\s\S]
,如果你没有要分割正则表达式\b
,请使用Jonhy
围绕约翰。如果您想匹配空字符串,请将+
替换为*
,如果您不想包含新行,请使用[^\n]+
(除新行之外的所有字符)。