如何使用Javascript解析包含数据逗号的CSV字符串?

如何使用Javascript解析包含数据逗号的CSV字符串?

我有以下类型的字符串

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

我想在每个逗号上将字符串拆分成一个数组,但只有单引号之外的逗号。

我找不出正确的标准.

string.split(/,/)

会给我

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

但结果应该是:

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

有没有跨浏览器的解决方案?


阿波罗的战车
浏览 1345回答 3
3回答

森栏

RFC 4180溶液这不能解决问题中的字符串,因为它的格式不符合RFC 4180;可接受的编码是用双引号转义双引号。下面的解决方案可以正确地处理Google电子表格中的CSV文件D/L。解析单行是错误的。根据rfc 4180字段可能包含crlf,这将导致任何行读取器破坏csv文件。下面是解析CSV字符串的更新版本:'use strict';function csvToArray(text) {    let p = '', row = [''], ret = [row], i = 0, r = 0, s = !0, l;    for (l of text) {        if ('"' === l) {            if (s && l === p) row[i] += l;            s = !s;        } else if (',' === l && s) l = row[++i] = '';        else if ('\n' === l && s) {            if ('\r' === p) row[i] = row[i].slice(0, -1);            row = ret[++r] = [l = '']; i = 0;        } else row[i] += l;        p = l;    }    return ret;};let test = '"one","two with escaped """" double quotes""","three, with, commas",four with no quotes,"five with CRLF\r\n"\r\n"2nd line one","two with escaped """" double quotes""","three, with, commas",four with no quotes,"five with CRLF\r\n"';console.log(csvToArray(test));
打开App,查看更多内容
随时随地看视频慕课网APP