为了账号安全,请及时绑定邮箱和手机立即绑定

如何在javascript中拆分逗号分隔列表,但不要拆分带有空值的引号内的任何内容

如何在javascript中拆分逗号分隔列表,但不要拆分带有空值的引号内的任何内容

慕后森 2021-11-12 15:49:32
我有一个逗号分隔的列表,它可以包含空白值,并且可以包含用我不想拆分的双引号括起来的值。我需要使用此拆分创建一个数组,以便稍后可以遍历它。我试过使用一些有效的匹配正则表达式,除了它忽略了我拥有的任何空值。我一直在尝试使用一些前瞻正则表达式,但我认为我的语法不能正常工作,因为它返回一个长度为 1 的数组。这是最接近地显示我要去的匹配代码var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';var array = s.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g);这是仅返回长度为 1 的数组的拆分语法var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';var array = s.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");使用匹配功能,我希望输出为:ToInfinityAnd, BeyondBuzz Lightyear但是,我的输出实际上是ToInfinityAnd, BeyondBuzz Lightyear
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

由于您在问题中标记了 mirth,因此您可以使用内置的 mirth 解析器。请注意,您的问题中的确切字符串将不起作用,因为逗号之后和“And, Beyond”之前有一个空格。如果要引用 CSV 字段,则需要引用整个字段(否则引用将被视为值的一部分。)


var serializer = SerializerFactory.getSerializer('delimited');


var s = 'To,Infinity,"And, Beyond",,Buzz Lightyear';

var split = new XML(serializer.toXML(s));

for each (var col in split.row.children()) {

    logger.info(col.toString());

}

编辑:我没有生成数组,因为你说你只需要它进行循环,如上所示,但如果你仍然需要一个数组,你可以这样做:


var arr = [];

for each (var col in split.row.children()) {

    arr.push(col.toString());

}


查看完整回答
反对 回复 2021-11-12
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

这应该按照您的期望工作:


var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';

var array = s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);


console.log(array);


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信