Как я могу проанализировать строку CSV с помощью Javascript, которая содержит запятую в данных?

У меня есть следующий тип строки

var string = "'string, duppi, du', 23, lala"

Я хочу разбить строку на массив по каждой запятой, но только запятые вне одинарных кавычек.

Я не могу определить правильное регулярное выражение для разделения ...

string.split(/,/)

даст мне

["'string", " duppi", " du'", " 23", " lala"]

, но результат должен быть следующим:

["string, duppi, du", "23", "lala"]

Есть ли кроссбраузерное решение?

79
задан Neo 12 May 2016 в 06:38
поделиться

1 ответ

никакой 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;
}
1
ответ дан 24 November 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: