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

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


我试过使用一些有效的匹配正则表达式,除了它忽略了我拥有的任何空值。我一直在尝试使用一些前瞻正则表达式,但我认为我的语法不能正常工作,因为它返回一个长度为 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


慕后森
浏览 162回答 2
2回答

蓝山帝景

由于您在问题中标记了 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());}

慕田峪4524236

这应该按照您的期望工作:var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';var array = s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);console.log(array);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript