Javascript 拆分带有标题的文本

Javascript 拆分带有标题的文本,javascript,parsing,Javascript,Parsing,我有这样一个字符串: &topic1 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut &topic2 labore et dolore magna aliqua. Ut enim ad minim www.example.com/test?id=1&name=abc veniam, quis nostrud exercitat

我有这样一个字符串:

&topic1
Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
sed do 
eiusmod tempor incididunt ut 

&topic2
labore et dolore magna aliqua. Ut enim ad minim 
www.example.com/test?id=1&name=abc
veniam, quis nostrud exercitation ullamco lab

&topic3
hello
每次有
(行首)+&+name+\n
,都应将其解析为新项

用Javascript以这种方式解析它最自然的方式是什么:

[['topic1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do\neiusmod tempor incididunt ut'],
 ['topic2', 'labore et dolore magna aliqua. Ut enim ad minim\nwww.example.com/test?id=1&name=abc\nveniam, quis nostrud exercitation ullamco lab'],
 ['topic3', 'hello']]

我对这种方法有几个问题:

var s=“&topic1\nlrem ipsum door sit amet,concetetur adipiscing elit,\nsed do\neiusmod tempor incidedut ut\n\n&topic2\nlaboure et dolore magna aliqua.ut enim ad minim\nww.example.com/test?id=1&name=abc\nvenniam,quis nostrud execution ullamco lab\n\n&topic3\nhello”;

s、 split('&').forEach(函数(elt){console.log(elt.split('\n')[0],elt.split('\n').slice(1));})首先按换行符拆分,然后将它们合并,直到找到新主题:

var s=“&topic1\nlrem ipsum door sit amet,concetetur adipiscing elit,\nsed do\neiusmod tempor incidedut ut\n\n&topic2\nlaboure et dolore magna aliqua.ut enim ad minim\nww.example.com/test?id=1&name=abc\nvenniam,quis nostrud execution ullamco lab\n\n&topic3\nhello”;
常量结果=[];
设acc=[];
对于(s.split(“\n”)的常量行){
如果(第[0]行=“&”){
//新发现的主题
结果:推送(acc);
acc=[line.substr(1),”;
}否则{
acc[1]+=(acc[1]&&“\n”)+行;
}
}
结果:推送(acc);
result.shift();//从数组中删除第一个元素并返回该删除的元素

控制台日志(结果)
@basj我不能抱歉(在我的手机上不工作),但请随意编辑:)哇,你在手机上写代码,恭喜:)(我发现在这么小的屏幕/小键盘上格式化代码太难了!)。我编辑成一段代码片段。多谢各位@basj关于习惯的一切,谢谢你的编辑,我很高兴能提供帮助:)一个小小的角落案例@JonasW.:如果
var s=“&topic1\nLo\nrem\n&topic2\nipsum”
,那么我想
[[“topic1”,“Lo\nrem”],[“topic2”,“ipsum”]
而不是
Lo\nrem\n
ipsum\n
。有什么想法吗?我可能应该删除最后一个
\n
但是有什么更好的方法呢?@basj如果
acc[1]
是一个空字符串(“”),它将接受该空字符串(因此它不会在开头添加换行符),否则如果
acc[1]
不再是空的,它将改为
\n
,因此它会追加一个换行符。这种行为称为短路和真实性。