위 글은 ellie쌤의 YOUTUBE를 보고 정리한 글입니다
참고사이트 | https://www.youtube.com/watch?v=t3M6toIflyQ
regex
regular expression의 약자로 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어
쓰임
- 원하는 문자열 찾고 수정할 때-웹사이트 주소 등
- -전화번호
- 사용자가 입력한 데이터가 올바른지 유효성 검사할 경우
정규 표현식 쓰는법
slashes안에 pattern을 적고 flag를 이용해 어떤 옵션을 이용해 검색할 건지 정함
flag
어떤 옵션을 이용해 검색할지 주로 global + multiline을 씀
- g(global) : g 플래그가 붙으면 패턴과 일치하는 모든 것들을 찾습니다. g 플래그가 없으면 패턴과 일치하는 첫 번째 결과만 반환됩니다.
- m(multiline) : 다중 행 모드(multiline mode)를 활성화합니다.
- i : i 플래그가 붙으면 대·소문자 구분 없이 검색합니다. 따라서 A와 a에 차이가 없습니다.
- s : .이 개행 문자 \n도 포함하도록 ‘dotall’ 모드를 활성화합니다.
- u : 유니코드 전체를 지원합니다. 이 플래그를 사용하면 서로게이트 쌍(surrogate pair)을 올바르게 처리할 수 있습니다.
- y : 문자 내 특정 위치에서 검색을 진행하는 ‘sticky’ 모드를 활성화 시킵니다
pattern (4가지 방법)
Groups and ranges
| : 또는
() : 그룹
[] : 문자셋, 괄호안의 어떤 문자든
[^] : 부정 문자셋, 괄호안의 어떤 문자 아닐 때
(?:) : 찾지만 기억하지는 않음
1. |
/Hi|Hello/gm
2. ()
//그룹1로 처리됨
/(Hi|Hello)/gm
//그룹 1,2
/(Hi|Hello)|(bye)/gm
3. (?:)
//찾지만 그룹으로 기억하고 싶진 않을 때
//grey, gray, grdy찾음
/gr(?:e|a|d)y/gm
4. []
//여러 문자들을 받을 수 있음
//grey, gray, grdy찾음
/gr[ead]y/gm
//a-z, A-Z, 0-9인 문자들 찾음
/[a-zA-Z0-9]/gm
5. [^]
//a-z, A-Z, 0-9 제외한 문자들 찾음
/[a-zA-Z0-9]/gm
Quantifiers
수량에 관련, 원하는 문자 뒤에 붙여줌
? : 없거나 있거나 (zero or one)
* : 없거나 있거나 많거나 (zero or one or many)
+ : 하나 또는 많이 (one or many)
{n} : n번반복
{min,} : 최소
{min, max} : 최소 그리고 최대
1. ?
// gry, gray
/gra?y/gm
2. *
// gry, gray, graay, graaay...
/gra*y/gm
3. +
// gray graay graaay
/gra+y/gm
4. {n}
// graay
/gra{2}y/gm
5. {min,}
// graay, graaay, graaaay
/gra{2,}y/gm
6. {min, max}
// max값 포함
// graay graaay
/gra{2,3}y/gm
Boundary-type
\\b : 단어 경계
\\b : 단어 경계가 아님
^ : 문장의 시작
$ : 문장의 끝
1. \b
//해당 문자가 단어의 앞에올지 뒤에올지
// Ya YaYaYa
/\bYa/gm
// Ya YaYaYa
/Ya\b/gm
2. \B
// \b의 반대
// Ya YaYaYa
/\BYa/gm
// Ya YaYaYa
/Ya\B/gm
3. ^
// Ya YaYaYa
/^Ya/gm
4. $
// Ya YaYaYa
/Ya$/gm
Character classes
\ : 특수문자를 찾을 때
. : 모든 글자(줄바꿈 문자 제외)
\d : digit 숫자
\D : digit아닌 모든 문자
\w : word 문자
\W : word 아닌 것
\s : space 공백
\S : 공백 아닌 모든 문자
1. \
// []{}
/\[\]\{\}/gm
// .
/\./gm
// [hello]
\[hello\]gm
2. .
// 모든 숫자, 문자, 띄어쓰기
/./gm
3. /d
// 123456
//d/gm
4. /D
// 123abc123
//D/gm
5. /w
// 123abc123
//w/gm
6. /W
// 123abc123
//W/gm
7. /s
// 모든 스페이스
//s/gm
8. /S
// 스페이스 아닌 것
//S/gm
퀴즈
1. 전화번호 찾기
/\d{2,3}[.-\s]\d{3}[\.-\s]\d{4}/gm
010-898-0893
010.898.0893
010 898 0893
010-405-3412
02-878-8888
2. 이메일 선택
/[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+
dream.coder.ellie@gmail.com
hello@daum.net
hello@daum.co.kr
hello_git@m1-.co.k.r
3. youtube ID만 가져오기
?: 사용하면 그룹 선택x
주소 뒤의 ID(group1)만 할당되는 것 확인 가능
/(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/gm
http://www.youtu.be/-ZClicWm0zM
https://www.youtu.be/-ZClicWm0zM
https://youtu.be/-ZClicWm0zM
youtu.be/-ZClicWm0zM
regex in js
match 를 사용해서 regex결과값 얻어오기
const regex = /(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})/
const url = "http://www.youtu.be/-ZClicWm0zM"
url.match(regex)
["http://www.youtu.be/-ZClicWm0zM", "-ZClicWm0zM", index: 0, input: "http://www.youtu.be/-ZClicWm0zM", groups: undefined]
const result = url.match(regex)
result[1] //-ZClicWm0zM
추천사이트1 | regexr.com/5mhou
추천사이트2 | regexone.com/