728x90
반응형
SMALL
정규 표현식(regular expression, regexp, regex, rational expression) 또는 정규식은
특정 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어다.
정규표현식 테스트 할 수 있는 사이트
정규표현식의 구성
- 정규표현식이라고 표현하는 슬래시(/)
- 찾아낼 패턴
- 찾을 때 옵션을 줄 수 있는 flag
Group and ranges
문법 | 의미 | 상세 설명 |
| | 또는 | 패턴을 OR조건으로 연결시킴 |
( ) | 그룹 | 패턴들의 그룹을 지음 |
[ ] | 문자셋, 괄호안의 어떤 문자든 | 대괄호 안에 들어있는 모든 문자를 포함하는 문자열을 찾음 |
[^] | 부정 문자셋, 괄호안의 어떤 문자가 아닐때 | 대괄호 안에 들어있는 모든 문자를 제외한 문자열를 찾음 |
(?:) | 찾지만 기억하지는 않음 | 그룹을 지어서 찾지만 찾아진 문자열에 그룹 정보를 기록하지 않음 |
(?=) | 해당 패턴을 만족하는 바로 앞의 패턴을 찾음 찾지만 기억하지는 않음 |
바로 앞에 명시된 패턴을 찾는데, (?=) 그룹 패턴을 만족하는 경우만 찾음 |
Quantifiers
문법 | 의미 | 상세 설명 |
? | 없거나 있거나 | 물음표 앞의 패턴이 있든 없든 상관없이 찾음(optional을 의미함) 단, 있을 때는 1개 있는 경우만 찾음 |
* | 없거나 1개 이상 | 별표 앞의 패턴이 있든 없든 상관없이 찾음(optional을 의미함) 물음표와는 다르게 있는 경우에 1개 이상있는 경우를 찾음 |
+ | 1개 이상 | 플러스 앞의 패턴이 무조건 있는 경우를 찾음 1개 이상 있는 경우 모두 찾음 |
{n} | n개 있는 | 앞의 패턴이 정확히 n개 있는 경우를 찾음 |
{min,} | 최소 min개 있는 | 앞의 패턴이 최소 min개 있는 경우를 찾음 |
{min,max} | 최소 min개 있고 최대 max개 있는 | 앞의 패턴이 최소 min개 있고 최대 max개인 경우를 찾음 |
Boundary-type
문법 | 의미 | 상세 설명 |
\b | 단어 경계 | 찾는 패턴이 단어의 처음 또는 끝에 있는지 찾음 ex 1 ) /\bHello/g -> Hello가 단어 처음에 있는 것을 찾음 ex 2 ) /Hello\b/g -> Hello가 단어 끝에 있는 것을 찾음 |
\B | 단어 경계가 아님 | 찾는 패턴이 단어의 처음이 아니거나 끝이 아닌 경우를 찾음 |
^ | 문장의 시작 | 찾는 패턴이 문장의 처음에 있는 경우를 찾음 꺽쇠기호는 패턴 앞에 써주어야함. |
$ | 문장의 끝 | 찾는 패턴이 문장의 끝에 있는 경우를 찾음 달러기호는 패턴 뒤에 써주어야함. |
Character classes
문법 | 의미 | 상세 설명 |
\ | 특수문자를 일반문자로 인식 | 문법 키워드로 사용되는 특수문자를 일반 문자로 인식되도록 함 |
. | 모든 문자 (줄바꿈 문자 제외) | 줄바꿈 문자(\n)를 제외한 그 어떠한 문자를 모두 의미함 |
\d | 숫자 | 숫자 1개를 의미함 |
\D | 숫자 아님 | 숫자가 아닌 문자 1개를 의미함 |
\w | 문자 | 문자(word) 1개를 의미함 |
\W | 문자 아님 | 문자(word)가 아닌 1개를 의미함 |
\s | 공백 | 공백 1개를 의미함 |
\S | 공백 아님 | 공백이 아닌 문자 1개를 의미함 |
정규표현식 flag
- g(global) : 매칭되는 다수의 결과값을 모두 검색한다.
- i(case insensitive) : 대소문자 구분을 하지 않고 검색한다.
- m(multiline) : 다중 행 모드(multiline mode)를 활성화한다. 패턴 문법 중에서 ^ 와 $에 영향을 준다. 다중 행 모드에서 ^ 와 $는 전체 문자열의 처음과 끝 뿐 아니라 각 행(각 줄)의 시작과 끝도 검색 범위에 포함된다.
- s(single line) : 줄 바꿈 문자(개행문자, \n)도 문자로 포함 시켜서 검색한다. 그래서 .(점) 문법을 사용했을 때, 줄 바꿈 문자도 글자로 검색되도록 한다.
- u(unicode) : 유니코드를 검색할 수 있게 한다.
- y(sticky) : 문자열 내의 특정 위치를 검색할 수 있게 한다.
정규표현식 활용
1. 암호
- 조건1. 6~20 영문 대소문자
- 조건2. 최소 1개의 숫자 혹은 특수 문자를 포함해야 함
/^(?=.*[a-zA-Z])((?=.*\d)|(?=.*\W)).{6,20}$/
2. 전자우편 주소
/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/
3. URL
/^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/
4. HTML 태그
/\<(/?[^\>]+)\>/
5. 전화 번호 (123-123-2344 or 123-1234-1234)
/(\d{3}).*(\d{3}).*(\d{4})/
6. 날짜 (2/10/2023 or 2/10/23)
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/
7. jpg, gif 또는 png 확장자를 가진 그림 파일명
/([^\s]+(?=\.(jpg|gif|png))\.\2)/
8. 1부터 50 사이의 번호(1과 50 포함)
/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/
참고
https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
https://ko.javascript.info/regexp-introduction
https://hee-kkk.tistory.com/22
728x90
반응형
LIST
'기술 개발 > Javascript' 카테고리의 다른 글
this 가 동작하는 원리와 용법 (0) | 2023.03.31 |
---|---|
parameter와 argument의 차이 (0) | 2023.03.28 |
얕은 복사 vs 깊은 복사 (1) | 2023.01.12 |
호이스팅(Hoisting) (feat. var, let, const) (0) | 2023.01.05 |
async & await (0) | 2022.08.10 |