如何将字符串拆分为多个用 [ ] 括起来的子字符串,并且在子字符串中还可以找到分隔符?

在 Javascript 中,我如何将此字符串拆分[test,string,0,5,bob,0,1],[age,number,1,100,20,0,1], [male,const,0,0,yes,200,1]为一个子字符串数组,每个子字符串由[]以下各项限定:


[test,string,0,5,bob,0,1], [age,number,1,100,20,0,1],[male,const,0,0,yes,200,1]


语境:


我需要使用 Node JS 将配置文件中的行处理为数组。一行是以下形式的字符串:


someID,[test,string,0,5,bob,0,1],[age,number,1,100,20,0,1],[male,const,0,0,yes,200,1]

这需要最终作为数组中的一个元素:


var config = [

// One line from the config file:

['someID', ['test','string',0,5,'bob',0,1],[12,'number',1,100,20,0,1],['male','const',0,0,'yes',200,1]],


// more elements each representing a line...

];

我可以使用上面的“someID”从配置行中获取第一项,line.split(',',1)[0]但是如何将字符串的其余部分分成由[和绑定的子元素] ?


我试过 JS string.match() :


var elements = str.match(/\[(.*)\]/g);

但我得到了一个字符串


"[test,string,0,5,bob,0,1],[age,number,1,100,20,0,1], [male,const,0,0,yes,200,1]"

(我意识到这是因为它只与第一个[和最后一个匹配],而不处理其间的所有内容)


而不是具有单独字符串的数组:


"[test,string,0,5,bob,0,1]",

"[age,number,1,100,20,0,1]",

"[male,const,0,0,yes,200,1]",

JS .split(',') 显然将每个逗号都考虑在内,并在所有逗号上进行拆分,而不仅仅是 .split(',') 之外的逗号[]。我认为解决方案将是正则表达式?谢谢。


慕的地6264312
浏览 229回答 1
1回答

绝地无双

您使用的str.match(/\[(.*)\]/g)方法非常好,只需稍作调整即可。而不是使用.*which 将匹配每个字符,您应该使用它[^\]]来匹配除右括号之外的每个字符。const str = "someID,[test,string,0,5,bob,0,1],[age,number,1,100,20,0,1],[male,const,0,0,yes,200,1]";console.log(str.match(/\[[^\]]+\]/g))\[ 匹配左括号[^] 匹配不在此集合中的所有字符[^\]] 匹配所有字符 execpt ][^\]]+ 匹配一个或多个不匹配的字符 ]\] 匹配右括号
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript