我有一个用逗号分隔的列表,其中可能包含空白值,并且可能包含用双引号引起来的值,但我不想拆分。我需要使用此拆分创建一个数组,以便以后可以遍历它。
我已经尝试使用一些匹配的正则表达式,但是它忽略了我拥有的所有空值。我一直在尝试使用一些正则表达式正则表达式,但是我认为我的语法不能正常工作,因为它返回的数组长度为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
由于您在问题中标记了喜乐,因此可以使用内置的喜乐分析器。请注意,问题中的确切字符串将不起作用,因为逗号后和“ 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());
}
这应该按照您的期望工作:
var s = 'To, Infinity, "And, Beyond",,Buzz Lightyear';
var array = s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
console.log(array);