[김민태의 데브캠프] 정규식

vgotu99·2024년 12월 13일
post-thumbnail

정규식

특정한 문자열의 패턴을 표현하는데 사용하는 문자열 처리 도구로, 주로 텍스트 검색, 텍스트 치환, 데이터 유효성 검사 등에 활용된다.

주요 특징

  • 패턴 기반 매칭: 문자열 내에서 원하는 패턴(예: 특정 단어, 숫자 형식 등)을 찾을 수 있습니다.
  • 범용성: 다양한 프로그래밍 언어(JavaScript, Python, Java 등)에서 지원합니다.
  • 유연성: 단순한 검색부터 복잡한 조건을 적용한 문자열 처리까지 가능합니다.

정규식 기본 문법

패턴(pattern)설명
.임의의 한 문자
\d숫자 (0-9)
\D숫자가 아닌 문자
\w영문자, 숫자, 밑줄 ([A-Za-z0-9_])
\W\w의 반대
\s공백 문자 (스페이스, 탭, 줄바꿈)
\S공백 문자가 아닌 문자
^문자열의 시작
$문자열의 끝
[]문자 집합
[^]제외 문자 집합
*0번 이상 반복 (greedy)
+1번 이상 반복
?0번 또는 1번
{n}정확히 n번 반복
{n,}최소 n번 반복
{n,m}최소 n번, 최대 m번 반복
()그룹화 및 캡처
(?=...)긍정형 전방탐색
(?!...)부정형 전방탐색

JavaScript에서의 정규식 사용

  • 정규식 생성
    • 리터럴 방식: /pattern/flags
    • 생성자 방식: new RegExp('pattern', 'flags')
  • 플래그(flags)
플래그(flags)설명
g전역 검색
i대소문자 구분 없이 검색
m여러 줄 검색

예제

유효성 검사: 이메일

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

// 테스트
const email = "example@test.com";
console.log(emailRegex.test(email)); // true

유효성 검사: 비밀번호 (8~20자, 영문, 숫자, 특수문자 포함)

const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/;

// 테스트
const password = "Passw0rd@123";
console.log(passwordRegex.test(password)); // true

데이터 필터링: 전화번호 마스킹

const phone = "010-1234-5678";
const maskedPhone = phone.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
console.log(maskedPhone); // 010-****-5678

데이터 추출: URL에서 도메인 이름만 추출

const url = "https://www.example.com/page";
const domainRegex = /https?:\/\/(www\.)?([\w-]+)\.\w+/;
const domain = url.match(domainRegex)[2];
console.log(domain); // example

데이터 유효성 검사: 숫자만 포함 확인

const numericRegex = /^\d+$/;

// 테스트
console.log(numericRegex.test("12345")); // true
console.log(numericRegex.test("12345abc")); // false

데이터 필터링 - 특정 단어 제거

const text = "JavaScript is amazing, and I love JavaScript!";
const filteredText = text.replace(/JavaScript/g, "Programming");
console.log(filteredText); 

0개의 댓글