javascript - 如何将字符串拆分为用 [ ] 括起来的多个子字符串,并且在子字符串中还可以找到分隔符?
问题描述
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(',') 之外的逗号[]
。我认为解决方案将是一个正则表达式?谢谢。
解决方案
您的使用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))
\[
匹配左括号[^]
匹配所有不在此集中的字符[^\]]
匹配除所有字符外]
[^\]]+
匹配一个或多个不是的字符]
\]
匹配右括号
推荐阅读
- azure - .NET Core Web API 在部署到 Azure 后无法正常工作
- kubernetes - kubectl 事件从何而来?我如何导出这些?
- julia - 使用 Julia 在 Atom 上使用 LightGraphs 时出错
- python - 无法从主文件访问属性文件中的 Python 字典
- php - 在其他刀片中包含导航栏刀片使“Laravel”中的“CSS”冲突!
- javascript - 一个函数正在改变错误的变量值
- php - 无法在 docker 容器中安装 php5.6-gd
- json - 如何在 JOLT 中准备一个数组?
- javascript - ngMessages 的自定义包装器可重用指令以最小化 HTML:动态名称到指令
- java - shiro 授权过滤器被多次调用