> 웹 프론트엔드 > JS 튜토리얼 > JavaScript에서 정규식을 사용하여 인용 필드에 쉼표가 포함된 CSV 문자열을 구문 분석하려면 어떻게 해야 합니까?

JavaScript에서 정규식을 사용하여 인용 필드에 쉼표가 포함된 CSV 문자열을 구문 분석하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-04 16:45:12
원래의
941명이 탐색했습니다.

How can I parse a CSV string with embedded commas in quoted fields using regular expressions in JavaScript?

정규식 기반 CSV 문자열 구문 분석

문제 설명:

따옴표 안에 쉼표가 포함된 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 문자열에서 한 번에 하나의 값을 추출합니다. 유효성 검사 정규식과 동일한 규칙입니다. 인용된 값을 처리하고 이스케이프 문자를 제거합니다.

JavaScript 구현:**

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿