如何拆分 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());
}
我有一个逗号分隔的列表,它可以包含空白值,并且可以包含用双引号括起来的我不想拆分的值。我需要使用此拆分创建一个数组,以便稍后循环遍历它。
我试过使用一些有效的匹配正则表达式,但它忽略了我拥有的任何空值。我一直在尝试使用一些前瞻性正则表达式,但我认为我的语法无法正常工作,因为它返回了一个长度为 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());
}