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

How to split a comma separated list in javascript, but do not split anything inside quotes with null values

我有一个逗号分隔的列表,它可以包含空白值,并且可以包含用双引号括起来的我不想拆分的值。我需要使用此拆分创建一个数组,以便稍后循环遍历它。

我试过使用一些有效的匹配正则表达式,但它忽略了我拥有的任何空值。我一直在尝试使用一些前瞻性正则表达式,但我认为我的语法无法正常工作,因为它返回了一个长度为 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(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

使用匹配函数,我希望输出为:

To
Infinity
And, Beyond

Buzz Lightyear

然而,我的输出实际上是

To
Infinity
And, Beyond
Buzz Lightyear

这应该符合您的预期:

var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';
var array = s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);

console.log(array);

由于您在问题中标记了 mirth,您可以使用内置的 mirth 解析器。请注意,您问题中的确切字符串将不起作用,因为在逗号之后和 "And, Beyond." 之前有一个 space 如果您要引用 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());
}