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

问题描述 投票:0回答:2

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

我已经尝试使用一些匹配的正则表达式,但是它忽略了我拥有的所有空值。我一直在尝试使用一些正则表达式正则表达式,但是我认为我的语法不能正常工作,因为它返回的数组长度为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(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

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

To
Infinity
And, Beyond

Buzz Lightyear

但是,我的输出实际上是

To
Infinity
And, Beyond
Buzz Lightyear
javascript split comma double-quotes mirth
2个回答
0
投票

由于您在问题中标记了喜乐,因此可以使用内置的喜乐分析器。请注意,问题中的确切字符串将不起作用,因为逗号后和“ 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());
}

0
投票

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

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

console.log(array);
© www.soinside.com 2019 - 2024. All rights reserved.