У меня есть следующий тип строки
var string = "'string, duppi, du', 23, lala"
Я хочу разбить строку на массив по каждой запятой, но только запятые вне одинарных кавычек.
Я не могу определить правильное регулярное выражение для разделения ...
string.split(/,/)
даст мне
["'string", " duppi", " du'", " 23", " lala"]
, но результат должен быть следующим:
["string, duppi, du", "23", "lala"]
Есть ли кроссбраузерное решение?
никакой regexp, читаемый, согласно https://en.wikipedia.org/wiki/Comma-separated_values#Basic_rules
function csv2arr(str: string) {
let line = ["",];
const ret = [line,];
let quote = false;
for (let i = 0; i < str.length; i++) {
const cur = str[i];
const next = str[i + 1];
if (!quote) {
const cellIsEmpty = line[line.length - 1].length === 0;
if (cur === '"' && cellIsEmpty) quote = true;
else if (cur === ",") line.push("");
else if (cur === "\r" && next === "\n") { line = ["",]; ret.push(line); i++; }
else if (cur === "\n" || cur === "\r") { line = ["",]; ret.push(line); }
else line[line.length - 1] += cur;
} else {
if (cur === '"' && next === '"') { line[line.length - 1] += cur; i++; }
else if (cur === '"') quote = false;
else line[line.length - 1] += cur;
}
}
return ret;
}