function* getLinesFromString(source) { let lines = String(source || "").matchAll(/^.*$/gm); for (const [line] of lines) yield line; } function* getCsvValueFromLine(source, separator = ",") { const line = String(source || ""); let inString = false; let start = 0; for (let i = 0; i < line.length; i++) { const char = line[i]; const nextChar = line[i + 1]; if (char === '"') { inString = !inString; } else if (!inString && char === separator) { yield line.substring(start, i); start = i + 1; } else if (i + 1 === line.length) { yield line.substring(start, i + 1); } } } function decodeValue(val) { return val.trim().replace(/^"|"$/g, "").replace(/""/g, '"'); } function trimChars(s, c) { if (c === "]") c = "\\]"; if (c === "^") c = "\\^"; if (c === "\\") c = "\\\\"; return s.replace(new RegExp("^[" + c + "]+|[" + c + "]+$", "g"), ""); } const csv = `value1,"value,with,comma","value ""with quotes"" inside",value4`; for (const line of getLinesFromString(csv)) { console.log("======================"); for (const value of getCsvValueFromLine(line, ",")) { console.log("value:", decodeValue(value)); } }
577500cookie-checkJavascript parse CSV