정규 표현식 (Regex)

seungjun.dev·2025년 7월 26일
0

특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
즉, 특정한 형태가 규칙을 가진 문자열을 찾기 위해 그 형태나 규칙을 나타내는 패턴을 정의하는 식

기본 문법

1. 기본 메타문자

패턴의미예시
.임의의 문자 1개a.b는 "aab", "acb"와 일치
^문자열 시작^abc는 "abc"로 시작하는 문자열과 일치
$문자열 끝abc$는 "abc"로 끝나는 문자열과 일치
*0개 이상의 반복ab*c는 "ac", "abc", "abbc" 등과 일치
+1개 이상의 반복ab+c는 "abc", "abbc" 등과 일치
?0개 또는 1개ab?c는 "ac" 또는 "abc"와 일치

2. 문자 클래스

패턴의미예시
[abc]a, b, c 중 하나[abc]는 "a", "b", "c" 중 하나에 일치
[^abc]a, b, c 제외한 문자[^abc]는 "d", "e" 등 a, b, c가 아닌 문자에 일치
[a-z]소문자 a부터 z까지[a-z]는 "a", "b", ..., "z" 중 하나에 일치
[A-Z]대문자 A부터 Z까지[A-Z]는 "A", "B", ..., "Z" 중 하나에 일치
[0-9]숫자 0부터 9까지[0-9]는 "0", "1", ..., "9" 중 하나에 일치

3. 특수 문자 클래스

패턴의미동등한 표현
\d숫자 (0-9)[0-9]
\D숫자 제외[^0-9]
\w단어 문자 (알파벳, 숫자, 밑줄)[a-zA-Z0-9_]
\W단어 문자 제외[^a-zA-Z0-9_]
\s공백 문자스페이스, 탭, 줄바꿈
\S공백 문자 제외공백이 아닌 모든 문자

4. 수량자

패턴의미예시
{n}정확히 n번 반복a{3}는 "aaa"와 일치
{n,}n번 이상 반복a{2,}는 "aa", "aaa"와 일치
{n,m}n번 이상 m번 이하 반복a{2,3}는 "aa", "aaa"와 일치

정규 표현식 활용 예시

입력한 문자열이 숫자로만 이루어져 있는지 검증하는 예시 코드이다.

정규표현식을 사용하지 않은 경우

문자열의 모든 문자를 하나씩 순회하며 숫자인지 확인해야 한다. 코드가 길어지고 로직이 복잡해진다.

const isAllDigits = (str) {
  // 빈 문자열은 숫자로만 이루어진 것이 아니라고 판단
  if (str === "") {
    return false;
  }
  
  // 문자열의 모든 문자를 하나씩 확인
  for (let char of str) {
    // isNaN(Number(char)) 은 ' ' (공백)을 숫자로 취급하는 등 허점이 있음
    // 따라서 더 엄격한 검사를 위해 유니코드 값을 확인하는 것이 좋음
    if (char < '0' || char > '9') {
      return false; // 숫자가 아닌 문자가 하나라도 있으면 false 반환
    }
  }
  
  // 모든 문자가 숫자이면 true 반환
  return true;
};

console.log(isAllDigits("12345"));      // true
console.log(isAllDigits("123a5"));      // false
console.log(isAllDigits(" 12345 "));    // false

정규표현식을 사용한 경우

단 한 줄의 정규표현식으로 동일한(그리고 더 정확한) 검증을 수행할 수 있다.

  • ^: 문자열의 시작

  • \d: 숫자 (0-9)

  • +: 앞의 패턴(\d)이 하나 이상 반복됨

  • $: 문자열의 끝

^$를 함께 사용하면 "문자열 전체가 오직 숫자로만 구성되어야 한다"는 엄격한 규칙이 만들어진다.

const isAllDigits = (str) {
  // /^\d+$/ 패턴: 문자열의 시작(^)부터 끝($)까지 숫자(\d)가 1개 이상(+) 있는지 검사
  const regex = /^\d+$/;
  return regex.test(str);
};

console.log(isAllDigits("12345"));      // true
console.log(isAllDigits("123a5"));      // false
console.log(isAllDigits(" 12345 "));    // false (공백 때문에 실패)
profile
Web FE Dev | Microsoft Student Ambassadors Alumni

0개의 댓글