車輪の再発明です
CSV の仕様
改行は CRLF
でなければならないそうです。
実装例
function parseCSV(d) {
let t = d.replace(/\r\n$/u, '')
const r = [[]]
let c = 0
let l, m, n
while ([l, m, n] = /^(|[^",](?:[^,\r]|\r[^,\n])*\r?|"(?:[^"]|"")*")(,|\r\n|$)/u.exec(t)) {
if ('"' === m[0] && '"' === m[m.length - 1]) m = m.slice(1, -1)
r[c].push(m.replace(/""/gu, '"'))
if (!n) break
if (',' !== n) r[++c] = []
t = t.substring(l.length)
}
return r
}
実装例2
\n
や \r
も改行とみなす方が便利かと思います。
function parseCSV(d) {
let t = d.replace(/(\r?\n|\r)$/u, '')
const r = [[]]
let c = 0
let l, m, n
while ([l, m, n] = /^(|[^",][^,\r\n]*|"(?:[^"]|"")*")(,|\r?\n|\r|$)/u.exec(t)) {
if ('"' === m[0] && '"' === m[m.length - 1]) m = m.slice(1, -1)
r[c].push(m.replace(/""/gu, '"'))
if (!n) break
if (',' !== n) r[++c] = []
t = t.substring(l.length)
}
return r
}