分割包含连续逗号加上引号括起来的逗号的字符串

Dri*_*lue 2 javascript regex

我正在尝试拆分一个包含连续逗号以及用引号括起来的逗号的字符串,但无法完全获得我想要的结果。这是我拥有的字符串的示例:

\n\n

var str = \xe2\x80\x9810,Apple,"Sweet Gala apple, from Australia",,,,,,in stock,3.99\xe2\x80\x99

\n\n

其中第三个元素在引号内有一个逗号,后跟多个逗号。

\n\n

我想在两种情况下用逗号分割字符串:1)不要分割引号内的逗号2)彼此相邻的多个逗号之间应被视为空格

\n\n

当我使用下面的正则表达式时:

\n\n
str.match(/(".*?"|[^,]+)/g)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果出现在下面的数组中,满足第一个条件,但未能在连续逗号之间插入空格

\n\n
["10","Apple",""Sweet Gala apple, from Australia"","in stock","3.99"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望它看起来像:

\n\n
["10","Apple",""Sweet Gala apple, from Australia"",\'\',\'\',\'\',\'\',\'\',"in stock","3.99"]  \n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要做什么才能满足以上两个条件?

\n

Cer*_*nce 5

这里的主要问题是在某些条件下你想要零长度匹配,但是引擎总是会尝试获得零长度匹配,无论最后一个匹配的项目是否以相同的索引结尾(like10,将匹配10,并且如果模式允许空匹配,然后将尝试匹配 10 和,) 之间的空字符串。仅靠简单的全球比赛无法区分这一点和,,,,,,情况。

我会使用split,而不是match- 在逗号上分割,并对非"字符进行否定前瞻,后跟",, 以确保匹配的逗号不在序列内""

var str = '10,Apple,"Sweet Gala apple, from Australia",,,,,,in stock,3.99';
const result = str.split(/,(?![^"]*",)/);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

如果""s 可能出现在最后,则在负向前瞻的末尾,将 与,交替$

var str = '10,Apple,"Sweet Gala apple, from Australia",,,,,,in stock,3.99,"foo, bar"';
const result = str.split(/,(?![^"]*"(?:,|$))/);
console.log(result);
Run Code Online (Sandbox Code Playgroud)