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

问题描述

TLDR;

在 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]但是如何将字符串的其余部分分成由[and绑定的子元素]

我试过 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(',') 之外的逗号[]。我认为解决方案将是一个正则表达式?谢谢。

标签: javascriptnode.js

解决方案


您的使用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))

  • \[匹配左括号
  • [^]匹配所有不在此集中的字符
  • [^\]]匹配除所有字符外]
  • [^\]]+匹配一个或多个不是的字符]
  • \]匹配右括号

推荐阅读