JavaScript 정규표현식으로 커스텀 문자열 파싱하기

JS K·2025년 10월 18일
post-thumbnail

✏️ 들어가며

최근에 문자열 "//;\n1;2;3" 같은 입력을 처리하면서,
커스텀 구분자와 숫자 부분을 분리해야 하는 상황이 있었습니다.
이 글에서는 정규표현식으로 그 문제를 해결하는 방법을 정리해봤습니다.





🎯 목표

문자열 "//;\n1;2;3" 에서 다음 두 가지를 처리해야 합니다.

  1. //(아무문자 0개 이상)\n 으로 시작하는지 검사
  2. //\n 사이의 구분자(; 등) 와, 그 뒤의 숫자 문자열(1;2;3) 을 추출





1️⃣ 시작 부분 검사

const str = "//;\n1;2;3";
const pattern = /^\/\/.*\n/;

console.log(pattern.test(str)); // true
  • ^ : 문자열의 시작
  • \/\/ : 슬래시 두 개 (정규식 안에서는 //를 이스케이프해야 함)
  • .* : 줄바꿈 전까지 아무 문자 0개 이상
  • \n : 줄바꿈 문자

👉 문자열이 //로 시작하고 줄바꿈(\n)으로 끝나는 첫 줄인지 검사할 수 있습니다.





2️⃣ 구분자와 본문 추출

const str = "//;\n1;2;3";
const re = /^\/\/(?<delimiter>.*)\n(?<numbers>[\s\S]*)$/;
const match = str.match(re); 
/*
  match는 이렇게 나옵니다.
  1. 매칭 실패시 => null
  2. 매칭 성공시 => 
    [
      "//;\n1;2;3", // 전체 매칭 결과
      ";",           // 첫 번째 캡처 그룹
      "1;2;3",       // 두 번째 캡처 그룹
      groups: { delimiter: ";", numbers: "1;2;3" },
      index: 0,      // 매칭 시작 인덱스
      input: "//;\n1;2;3" // 원본 문자열
    ]
*/

if (match) {
  console.log("delimiter:", match.groups.delimiter); // ';'
  console.log("numbers:", match.groups.numbers);     // '1;2;3'
}

정규식 구조 설명

부분의미
^\/\/문자열이 //로 시작
(?<delimiter>.*)\n 이전까지의 구분자 (0개 이상 문자)
\n줄바꿈 문자
(?<numbers>[\s\S]*)줄바꿈 뒤의 나머지 모든 문자
$문자열의 끝





💡 세부 설명

(?<delimiter>.*) — 구분자 부분

  • (?<name>...)이름 붙은 캡처 그룹
  • .* 은 “아무 문자 0개 이상” (줄바꿈 제외)
  • 따라서 // 다음 줄바꿈(\n) 전까지의 내용을 구분자로 추출

예: "//;\n1;2;3"delimiter = ";"


(?<numbers>[\s\S]*) — 숫자 부분

  • [\s\S]모든 문자를 의미 (줄바꿈 포함)
  • * 은 0번 이상 반복
  • 따라서 줄바꿈 이후의 전체 문자열을 한 번에 캡처

예: "//;\n1;2;3"numbers = "1;2;3"





✨ 정리

이 정규식 하나로 다음을 동시에 처리할 수 있습니다:

^\/\/(?<delimiter>.*)\n(?<numbers>[\s\S]*)$

✔️ 문자열이 //로 시작하고 줄바꿈으로 구분되는 구조인지 확인
✔️ 구분자와 실제 데이터(숫자 문자열) 모두 추출 가능





📚 보너스: 함수로 감싸기

function parseCustomInput(str) {
  const re = /^\/\/(?<delimiter>.*)\n(?<numbers>[\s\S]*)$/;
  const m = str.match(re);
  if (!m) return null;
  return {
    delimiter: m.groups.delimiter,
    numbers: m.groups.numbers
  };
}

console.log(parseCustomInput("//;\n1;2;3"));
// 👉 { delimiter: ';', numbers: '1;2;3' }





💭 느낀 점

이번에 정규표현식을 사용하면서,
문자열이 특정한 규칙을 만족하는지
간단하게 테스트하고 처리할 수 있다는 점
정말 강력하다고 느꼈습니다.

다만 정규표현식에는 규칙이 많고,
지금은 암호처럼 느껴지지만 😅
패턴 하나하나의 의미를 정확히 이해하고 나면
복잡한 문자열도 훨씬 쉽게 다룰 수 있을 것 같습니다.

그래서 앞으로 더 다양한 예제를 통해 연습하면서,
정규표현식을 자신 있게 사용할 수 있도록 해야겠다고 생각했습니다.

profile
1.01^365

0개의 댓글