문제 설명:
따옴표 안에 쉼표가 포함된 CSV 문자열을 구문 분석합니다. 따옴표 밖의 쉼표는 무시합니다.
이스케이프 문자와 함께 인용 값이 포함될 수 있는 CSV 문자열을 올바르게 구문 분석하려면 문자열을 문자별로 살펴보아야 합니다. 두 가지 정규식이 사용됩니다.
CSV 유효성 검사 정규식:
^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*)*$
이 정규식은 입력 문자열이 정의된 CSV 형식을 따르도록 보장합니다. 여기서:
값 구문 분석 정규식:
(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*)|)\s*(?:,|$)
이 정규식은 다음을 고려하여 CSV 문자열에서 한 번에 하나의 값을 추출합니다. 유효성 검사 정규식과 동일한 규칙입니다. 인용된 값을 처리하고 이스케이프 문자를 제거합니다.
function CSVtoArray(text) { const re_valid = /^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*)*$/; const re_value = /(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*))\s*(?:,|$)/g; // Return NULL if input string is not well formed CSV string. if (!re_valid.test(text)) return null; const a = []; // Initialize array to receive values. text.replace(re_value, // "Walk" the string using replace with callback. function(m0, m1, m2, m3) { // Remove backslash from \' in single quoted values. if (m1 !== undefined) a.push(m1.replace(/\'/g, "'")); // Remove backslash from \" in double quoted values. else if (m2 !== undefined) a.push(m2.replace(/\"/g, '"')); else if (m3 !== undefined) a.push(m3); return ''; // Return empty string. }); // Handle special case of empty last value. if (/,\s*$/.test(text)) a.push(''); return a; }
const csvString = "'string, duppi, du', 23, lala"; const result = CSVtoArray(csvString); console.log(result); // ["string, duppi, du", "23", "lala"]
위 내용은 JavaScript에서 정규식을 사용하여 인용 필드에 쉼표가 포함된 CSV 문자열을 구문 분석하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!