繁体   English   中英

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

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

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

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

通过匹配 function,我希望 output 为:

To
Infinity
And, Beyond

Buzz Lightyear

然而我的output其实是

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”之前有一个空格。 如果您要引用 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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM