-
#TIL_J^&^U&^@&^G^&*%$%R%^^%U^#%^I&^K% 정규식에 대해 알아보자!.!TIL (Today I Learned) 2023. 11. 24. 15:27
# 정규식이란?
정규식(Regular Expression)은 특정한 규칙을 가진 문자열을 표현하고 검색, 매칭, 치환하는데 사용되는 형식 언어입니다. 이는 문자열 패턴을 기술하기 위한 강력한 도구로, 다양한 프로그래밍 언어와 텍스트 편집기에서 지원됩니다.
정규식을 이해하는 것은 텍스트를 활용하여 부가 가치를 창출하는데 필수적입니다. 우리는 일상생활에서 방대한 양의 텍스트를 생산하며, 이를 자연어 처리를 통해 인공지능으로 활용하거나 웹 크롤링을 통해 웹 페이지의 정보를 추출하는 등 다양한 방식으로 활용합니다. 정규식은 이러한 작업을 효율적으로 수행하는데 도움을 주며, 특정한 패턴을 갖는 문자열을 검색하거나 조작하는데 유용합니다.
# 정규식의 사용이유
*** 문자열 검색과 매칭
특정한 패턴을 가진 문자열을 검색하거나 추출할 때 사용됩니다. 예를 들어, 이메일 주소, 전화번호, URL등의 패턴을 찾을 수 있습니다 .
*** 문자열 대체
특정 패턴을 다른 문자열로 대체할 수 있습니다. 예를 들어, 특정 단어의 모든 출현을 다른 단어로 변경할 수 있습니다.
*** 문자열 분할
특정 패턴을 기준으로 문자열을 분할할 수 있습니다.
# 정규식 사용 방법의 종류
1. 문자 및 메타
*** 문자 클래스(Character Classes)
`[ ]` 내부에 문자의 집합을 나타냅니다. 예를 들어, `[ abc ]`는 `a`,`b`,`c`중 하나와 일치합니다.
*** 메타문자(Matacharacter)
`.` (어떤 문자와 일치), `^` (문자열의 시작), `$` (문자열의 끝) 등 특별한 의미를 가지는 문자들입니다.
2. 수량자(Quantifiers)
`*`: 0번 이상 반복을 나타냅니다. `+`: 1번 이상 반복을 나타냅니다. `?`: 0번 또는 1번의 등장을 나타냅니다. `{n}`: n번 반복을 나타냅니다. `{n,}`: 최소 n번 이상 반복을 나타냅니다. `{n,m}`: 최소 n번, 최대 m번까지 반복을 나타냅니다.
3.그룹(Grouping) 및 캡쳐
`()`: 패턴을 그룹화하고 매치 결과를 얻을 수 있습니다. `(?:)`: 캡처하지 않는 그룹을 만들 수 있습니다. `\n`: n번째 그룹에 대한 역참조를 나타냅니다.
4. 이스케이프(Escape)
`\`: 다음에 오는 문자를 이스케이프하여 특수 문자가 아닌 일반 문자로 취급합니다.
5.기타 등등
`\b`: 단어 경계를 나타냅니다. `\B`: 단어 경계가 아닌 곳을 나타냅니다. `\d`: 숫자와 일치합니다. `\w`: 문자와 숫자, 밑줄과 일치합니다. `\s`: 공백 문자와 일치합니다.
# 실제 적용한 예시_이메일 주소 기본 패턴
let emailValidationRegex = new RegExp('[a-z0-9._]+@[a-z]+\\.[a-z]{2,3}'); const isValidEmail = emailValidationRegex.test(email); if (!isValidEmail) { return res.status(400).json({ success: false, message: '올바른 이메일 형식이 아닙니다.', }); }
위 코드에서, 정규식 '[a-z0-9._]+@[a-z]+\\.[a-z]{2,3}'은 이메일 주소의 기본 패턴을 나타냅니다. 이메일 형식에 대한 일부 검사를 수행하여 올바른 형식이 아닌 경우 오류 메시지를 반환합니다. 이것은 정규식을 사용하여 문자열 검증에 유용하게 사용되는 예시 중 하나입니다.
코드를 해석하면
1. [a-z0-9._]+
[]: 문자 클래스를 나타내며, 여기서는 소문자 알파벳(a-z), 숫자(0-9), 점(.), 밑줄(_) 중 하나 이상의 문자와 매칭됩니다.
+: 앞의 패턴이 한 번 이상 나타남을 의미합니다.
2. @
이메일 주소에서 로컬 파트(local part)와 도메인 파트(domain part)를 구분하는 기호입니다. 특정한 매치를 위해 직접 사용되었습니다.
3. [a-z]+
소문자 알파벳(a-z) 중 하나 이상의 문자와 매칭됩니다.
4. \\.
역슬래시(\)로 점(.)을 이스케이프하여 실제 점 문자를 나타냅니다.
이 부분은 이메일 주소에서 도메인 이름과 최상위 도메인을 나타냅니다.
5. [a-z]{2,3}
소문자 알파벳(a-z) 중 2개 또는 3개의 문자와 매칭됩니다.
이 부분은 최상위 도메인을 나타냅니다. 보통 이메일 주소의 최상위 도메인은 두 글자(.com, .net, .org 등) 또는 세 글자(.info, .edu 등)로 구성됩니다.
위의 정규식은 주어진 문자열이 이메일 주소 형식에 맞는지 확인합니다. 주어진 문자열이 이 형식과 일치하지 않는 경우에는 isValidEmail이 false로 평가되며, 이때는 "올바른 이메일 형식이 아닙니다."라는 메시지와 함께 400 상태 코드를 반환하는 예시 코드입니다.
*** 정규 표현식을 배우고, 만들고, 시험할 수 있는 온라인 도구
*** 정규 표현식 생성기/디버거
*** 시각적 정규 표현식 테스터
'TIL (Today I Learned)' 카테고리의 다른 글
#TIL_express cookie-parser를 적용해보자!.! (0) 2023.11.28 nullish 병합 연산자(??)와 OR 논리 연산자(||)의 차이점!.! (0) 2023.11.26 #TIL_옵셔널 체이닝(Optional Chaining)이 있어서 듬직허다 (2) 2023.11.23 #TIL_CommonJS문법과 ES6문법을 이어주는 마법 도구가 있다??? Babel에 대해 알아보자!.!(핵심 마지막 Node.js 서버 실행 부분) (1) 2023.11.21 #TIL_npm, npx, yarn 고놈이 고놈 아닌가? 셋의 차이점을 빠르게 알아보자!.! (1) 2023.11.21