2024 06 05
2024-06-05
정규 표현식
참고: https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC
- 사용처
- 각각 다른 포맷으로 저장된 많은 전화번호 데이터 추출 시
- 사용자가 입력한 이메일, 폰 번호, IP 주소 등에 대한 검증
- 코드에서 특정 변수의 이름을 치환하고 싶은 경우
- 특정 조건과 위치에 따른 문자열 공백/특수문자 제거
- 정규식 구성
/regexr/i
/ : 시작, 종료 기호
regexr : 패턴
i : 플래그
- 정규식 메서드
("문자열").match(/regexr/i) : "문자열"에서 regexr에 매칭되는 항목을 배열로 반환
("문자열").replace(/regexr/, "대체문자열") : regexr에 매칭되는 항목을 "대체문자열"로 변환
("문자열").split(regexr) : "문자열"을 regexr에 매칭되는 항목으로 쪼개 배열로 반환
regexr.test("문자열") : "문자열"이 regexr에 매칭되면 true, 아니라면 false
regexr.exec("문자열") : "문자열"에서 regexr에 매칭되는 첫 항목만 반환 (match와 비슷)
- 정규식 플래그
i(Ignore case) : 대소문자를 구별하지 않고 검색
g(Global) : 문자열 내의 모든 패턴 검색
m(Multiline) : 문자열의 행이 바뀌더라도 검색 계속
u(Unicode) : 유니코드 문자 지원
y(Sticky) : 문자 내 특정 위치에서 검색을 진행하는 sticky 모드 활성화
s(DotAll) : .(모든 문자 정규식)이 개행 문자 \n도 포함하도록
- 정규식 기호 모음
a-zA-Z: 영어 알파벳
ㄱ-ㅎ가-힣: 한글
0-9: 숫자
.: 모든 문자열 (숫자/한글/영어/특수기호/공백 모두), but 줄바꿈 X
\d: 숫자
\D: 숫자가 아닌 문자
\w: 밑줄 문자를 포함한 영숫자 문자
\W: \w가 아닌것
\s: space 공백
\S: space 공백이 아닌 것
\특수기호: 특수기호
\b: 63개 문자(영문 대소문자 52개 + 숫자 10개 + _(언더스코어))가 아닌 나머지 문자에 일치하는 경계
\B: 63개 문자에 일치하는 경계
\x: 16진수 문자에 일치
\O: 8진수 문자에 일치
\u: 유니코드 문자에 일치
\c: 제어문자에 일치
\f: 폼 피드 문자에 일치
\n: 줄 바꿈 문자에 일치
\r: 캐리지 리턴 문자에 일치
\t: 탭 문자에 일치
- 정규식 검색 기준 패턴
^문자열: 특정 문자열로 시작 (시작점)
문자열$: 특정 문자열로 마무리 (종착점)
[^문자]: 괄호 안의 문자를 제외한 것
|: 또는
[]: 괄호안의 문자들 중 하나
- 정규식 갯수 반복 패턴
?: 없거나, 최대 한개만
*: 있거나 or 없거나
+: 최소 한개 or 여러개
{n}: n개
{n,}: 최소 n개 이상
{n,m}: 최소 n개 이상, 최대 m개 이하
- 정규식 그룹 패턴
(): 그룹화 및 캡쳐
(?:패턴): 그룹화 (캡쳐 X)
(?=): Lookahead - 앞쪽 일치
(?!): Negative Lookahead - 부정 앞쪽 일치
(?<=): Lookbehind - 뒤쪽 일치
(?<!): Negative Lookbehind - 부정 뒤쪽 일치