Regular Expression
정규식이해를 위한 기본지식
메타문자란 : 메타 문자란 원래 그 문자가 가진 뜻이 아니라 특별한 의미를 가진 문자로 아래와 같은 종류가 있다
. ^ $ * + ? { } [ ] \ | ( )
[] (/[condition]/) : [] 은 문자 클래스라는 문자
‘[’ 와 ‘]’ 사이의 문자들과 매치’하는 패턴이 있는지 한번 검사하는 것으로, 문자 클래스를 만드는 메타 문자인 [ ] 사이에는 어떤 문자도 들어갈 수 있다.
정규 표현식이 [abc]라면 이 표현식의 의미는 ‘a, b, c 중 한 개의 문자와 매치’를 뜻한다. 이해를 돕기 위해 문자열 "a", "before", "dude"가 정규식 [abc]와 어떻게 매치되는지 알아보겠다.
"a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치된다.
"before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치된다.
"dude"는 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않는다.
아래는 자주 쓰이는 meta 문자를 아니지만 역 slash 로 문자를 찾는 방법으로 [] 안에 들어가지 않는다
\d | 숫자와 매치된다. [0-9]와 동일한 표현식 |
\D | 숫자가 아닌 것과 매치된다. [^0-9]와 동일한 표현식 |
\s | 화이트스페이스(whitespace) 문자와 매치. [ \t\n\r\f\v]와 동일한 표현식 맨 앞의 빈칸은 공백 문자(space) |
\S | 화이트스페이스 문자가 아닌 것과 매치. [^ \t\n\r\f\v]와 동일한 표현식 |
\w | 문자+숫자(alphanumeric)와 매치. [a-zA-Z0-9_]와 동일한 표현식 |
\W | 문자+숫자(alphanumeric)가 아닌 문자와 매치된다. [^a-zA-Z0-9_]와 동일한 표현식 |
^ | 문자 클래스 안에 ^ 메타 문자를 사용할 경우에는 반대(not)라는 의미 |
아래는 자주 쓰이는 meta 문자로 [] 안에 들어가지 않는다.
.(dot) : 문자 \n을 제외한 모든 문자
a.b : "a + 모든_문자 + b"
a[.]b : [] 안에 . 문자를 쓰면 여기서 .는 메타 문자가 아니라 ‘.’ 문자 그대로를 의미 "a + . + b"
* : * 앞에 위치한 문자를 무한 반복
ca*t : 바로 앞에 있는 문자 a가 0부터 무한대까지 반복. [] 안에 들어가지는 않는다. (ex: ct, cat, caaat)
+ : +앞에 위치한 문자를 최소 1번 이상 반복
ca+t : "c + a가_1번_이상_반복 + t", [] 안에 들어가지는 않는다. (ex: cat, caaat) n/a for ct.
{} : {} 메타 문자를 사용하면 반복 횟수를 고정
{3,} : 반복 횟수가 3 이상인 경우
{, 3} : 반복 횟수가 3 이하인 경우
ca{2}t : "c + a를_반드시_2번_반복 + t" (ex : caat)
ca{2,5}t : "c + a를_2~5회_반복 + t" (ex : caat, caaaaat) cat is NA
? : 메타 문자가 의미하는 것은 {0, 1}
ab?c : "a + b가_있어도_되고_없어도_됨 + c", b 문자가 있거나 없거나 둘 다 매치
^
^If : start w/ If
$ :
idea.$ : end with idea.
Flag 의 종류
- 아래 examples 에서와 같이 정규식 맨 뒤에 붙는다
- 주로 아래 3종류를 많이 사용하고 Flag 를 사용하지 않을 수도 있다. Flag 설정을 하지 않으면 검색대상이 많아도 한번만 찾고 끝낸다.
- g : Global -문자열 내의 모든 패턴을 찾는다
- i : Ignore Case - 문자열의 대소문자 구별하지 않는다.
- m : multi line 의 경우도 계속 찾아라.
Examples
아래 example 을 이용하여 이해한 것을 정리함
datePattern = /^([a-z]+)\s+(\d+)\s*,\s+(\d{4})$/i;
- 맨 앞과 맨 뒤에 /, / 안의 붉게 표시한 것이 정규표현식이다
- 정규표현식 안의 ^ 와 $ 은 각각 정규 표현식 시작과 끝을 의미
- / /뒤의 i 는 flag 를 의미하는 것으로 ignore case임
- \s+ : white space 가 하나이상 반복가능
- [a-z]+ : a 부터 z 까지 어느 문자이건 하나이상 반복
- \d+ : 어떤 숫자이건 하나이상반복
- \s* : white space 가 0 이상 반복
- \d{4} : 숫자가 4개까지 반복
- () 는 group 을 의미함
위의 조건식의 경우 exec 함수에 "June 24, 2015" 을 입력으로 넣을 경우 아래와 같이 4개로 return 이된다. 이러한 특성을 이용하면 destructuring 으로 변수에 각각 대입이 가능한다.
'June 24, 2015',
'June',
'24',
'2015',
/Base[A-Z]\w+\.(vue|js)$/
- 맨앞 / 맨뒤 / : 정규표현식의 시작과 끝을 의미함
- Base : Base로 시작함
- [A-Z] : A 부터 Z까지의 문자 포함
- \w+ : 문자, 숫자가 최소 한번이상 반복됨
- \. : . 가 있는지 matching 함 확장자 전 . 을 찾는 것임 . 가 meta 문제이기 때문에 escape 문자 \ 를 붙여서 사용함.
- (vue|js)$ : end with vue 나 js. 확장자 vue or js file 을 찾는 용도로 사용함
/^\.\/(.*)\.\w+$/
- 맨앞 / 맨뒤 / : 정규표현식의 시작과 끝을 의미함
- ^\. : start w/ . (current directory)
- \/ : char /
- (.*) : 문자가 무한정 반복됨.
- \. : . 을 의미함
- \w+ : 문자 혹은 숫자가 1번이상 반복
- $ : 마지막을 의미
'./BaseInput.vue, './BaseSelect.vue 와 같은 형태임.
아래는 추가정리기 필요한 부분 - for mail validation
const regex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - TBD
JS 에서 사용하는 방법
var regExp = /정규표현식/[Flag];
잘정리된 blog
https://m.blog.naver.com/mu-ze/222257985666
정규표현식 (Regex)의 기초 : 메타문자
#정규표현식 #regex #regularexpression #메타문자 #meta 오늘은 정규표현식의 기본! 메타문자를 다뤄보려...
blog.naver.com