Java Scripts

Regular Expression

HobbyCoding 2023. 8. 11. 22:43
728x90

정규식이해를 위한 기본지식

 

메타문자란 : 메타 문자란 원래 그 문자가 가진 뜻이 아니라 특별한 의미를 가진 문자로 아래와 같은 종류가 있다

. ^ $ * + ? { } [ ] \ | ( )

 

[]  (/[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