20210318 JS Regular Expression(정규표현식), nodejs(express) vs python(django)

3 분 소요

정규 표현식




정규 표현식 (Regular Expression)

  • regex
    • 텍스트에서 특정 패턴을 찾을때 요긴 함(ex. 이메일, 전화번호, 등 패턴…)
    • 패턴 유효성 검사
  • 여러가지 언어를 지원하고 있으며, 심지어 여러 에디터에서도 정규표현식을 사용한 검색을 지원하고 있음

  • / /처럼 슬래쉬(slash)들을 사용하여 정규표현식을 알려주고 안에 찾고자 하는 패턴(pattern)을 넣고 외부에 옵션(flag)을 적어 활용할수 있음
  • /pattern/flag




Pattern

| : 또는

  • (ex. /hi|hello/gm) -> hi, hello


() : 그룹

  • (ex./(hi|hello)/gm) -> 그룹 1 : hi, hello
  • /(Hi/Hello)|(And)/gm -> 전체적으로 그룹 1 또는 그룹 2
  • 활용 예제 : /gr(e|a)y/gm -> gray(e 그룹) , grey(a 그룹)
  • 그룹 해제 방법(?:사용) : /gr(?:e|a)y/gm -> gray, grey


(?:) : 찾지만 기억하지는 않음

[] : 문자셋, 괄호안의 어떤 문자든 하나라도 만족하는 문자열을 찾을 때 사용 - /gr[aed]y/gm -> gray, grey, grdy … - /gr[a-f]y/gm -> a 부터 f 까지 에서 하나라도 만족하는 문자열을 찾을 때 사용 - /[a-zA-Z0-9]/gm -> a-z , A-Z, 0-9

[^] : 부정 문자셋, 괄호안의 어떤 문자가 아닐때 (except 처리) - /[^a-zA-Z0-9]/gm -> a-z , A-Z, 0-9를 제외한 나머지




  • Quantifiers(수량)

? : 없거나 있거나 (zero or one) - 특정 문자 뒤에 붙이면 특정 문자가 있는 경우 없는 경우 모두 match 함 - /gra?y/gm -> gray, gry

* : 없거나 있거나 많거나 (zero or more) - 특정 문자 뒤에 붙이면 특정문자가 있거나 없거나 많은 경우 모두 match 함 - /gra*y/gm -> gray, gry, graaay, graay

+ : 하나 있거나 많거나 (one or more) - 특정 문자 뒤에 붙이면 특정문자가 있 or 많 -> match - /gra+y/gm -> gray, graaay, graaaaay

{n} : n번 나오는 경우 match - /gra{2}y/gm -> graay

{a,} : 최소 a번 나오는 경우 (min) 즉, a 번 이상 {a, b} : 최소 a번 ~ 최대 b번 나오는 경우 (min-max) 즉, a~b 번 까지

  • Boundary-type

\b : 단어 경계 즉, 특정 단어 앞에다 쓰면 단어 단위를 기준으로 단어 내에서 제일 앞에 처음 찾아지는 것을 match함

  • /\bYa/gm : Ya , YaYaYa(맨 앞의 Ya만 찾아짐) 특정 단어 뒤에다 쓰면 제일 뒤에 찾아지는 것을 match함
  • /Ya\b/gm : YaYaYa(맨 뒤의 Ya만 찾아짐)

\B : \b의 반대로 작동함 (차집합 관계) - /\BYa/gm : Ya, YaYaYa (즉, 단어 맨 앞에서 찾아지는 것 하나를 제외한 나머지 ) - /Ya\B/gm : Ya , YaYaYa (즉, 단어 맨뒤에서 찾아지는 것 하나를 제외한 나머지 )

^ : 문장의 시작

$ : 문장의 끝부분에 matching 되는 것을 찾음 (multiline flag 찍혀있으면 문장 끝부분 검사하고, multiline 안찍으면 페이지 전체의 끝부분 검사) - /Ya$/ -> I’m racconcode, welcome ! Ya (주의 마지막에 . 이나 space가 들어가도 안됨 즉, 해당 문자 개수 만큼을 끝부분 검사해서 매칭하는지 보는 것임)

  • Character classes

\ : 특수 문자가 아닌 문자

  • 정규표현식에서 쓰이는 문자를 찾고 싶을 때는 \이스케이프를 붙여주어야 함 (ex. \$, \?, \.)

. : 어떤 글자(줄바꿈 문자 제외)

\d : digit 숫자를 전부 찾을 수 있음

\D : digit 숫자가 아닌 모든 것

\w : word 문자를 전부 찾음

\W : word 문자가 아닌 전부 찾음

\s : space 띄어쓰기를 찾음

\S : space 띄어쓰기를 제외한 것 모두 찾음




활용 예제

1) 아래 전화 번호를 선택 하시오


010-898-0893 010-405-3412 010 405 3412 010.405.3412 02-878-8888


Answer :

1) /\d\d\d?(-|\.|\s)\d\d\d(-|\.|\s)\d\d\d\d/gm

2) /\d{2,3}[-.\s]\d{3}/[-.\s]\d{4}

3) /\d{2,3}[- .]\d{3}/[- .]\d{4}




2) 아래 이메일을 선택 하시오

dream.coder.ellie@gmail.com hello@daum.net hello@daum.co.kr


Answer :

1) /([a-zA-z0-9]{1,}.){1,}@([a-zA-z0-9]{1,}.){1,}/gm

2) [a-zA-z0-9._+-]+@[a-zA-z0-9-]+\.[a-zA-z0-9.]+




3) 아래 유튜브 주소에서 ID를 선택 하시오

https://www.youtu.be/-ZClicWm0zM https://youtu.be/-ZClicWm0zM youtu.be/-ZClicWm0zM


Answer :

1) (?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})

그룹 1에 할당 되어 있음




Javascript 활용


주소 리스트를 가져와서 정규 표현식 사용하여 필요한 형식의 문자, 숫자 등의 형태를 가져와 활용할 수 있다.





Django vs Node.js




또 난관 이놈의 선택장애,,,, 그냥 node로 해보고 서버 구조좀 이해하고 js풀스택 찍어서 전체적인 흐름을 알아보자 일단.