간단기법
정규식 연습
씨알메리
2023. 6. 2. 19:38
기본
/패턴/플래그
패턴
/abcd/ // 문자열에 "abcd"가 있는지 찾는다.
플래그
i // 대소문자 구별 안함
g // 매칭 되는 모든 부분을 찾음
복잡한 패턴
정규식을 쓰는 이유. 알파벳만, 숫자만, 어떤 문자열로 시작해서 어떤 문자열로 끝나는지 지정 등등. 정규식을 조합하여 복잡한 패턴의 문자열을 특정할 수 있다. 이를 위해 정규식은 다양한 특수 문자를 지원한다.
Metacharacters(메타 문자)
특별한 의미를 지닌다
cat|dog|fish cat 또는 dog 또는 fish
. 어떤 캐릭터든지
\d digit
\D non-digit
\s white space
\S non-white space
\w alpha numreic
\W non alpha numeric
Quantifier(수량 지정자)
수량을 지정한다.
* : 앞에 있는 엘리먼트를 0번 이상 반복
+ : 앞에 있는 엘리먼트를 1번 이상 반복
? : 앞에 있는 엘리먼트를 0번 혹은 1번 반복
{n} : 앞에 있는 엘리먼트를 n번 반복
{n,} :앞에 있는 엘리먼트를 n번 이상 반복
{n,m} : :앞에 있는 엘리먼트를 n번 이상 m번 이하 반복
Anchor
위치를 지정한다
^ : 시작 문자열
$ : 끝 문자열
\b :단어와 단어의 경계
/^a.*b$/는 a로 시작하면서 어떤문자열이든지 받고 그 다음 b로 끝나는 패턴을 매칭할 수 있다.
Character class
[ ] : 괄호 안에 있는 어떤 문자이든 하나를 매칭한다.
[^ ] : 괄호 안에 있는 어떤 문자이든 하나를 매칭하는데, ^다음에 이어지는 것들을 제외한다.
. : 뉴라인을 제외한 어떤 문자이든 하나를 매칭한다.
\d: [0-9]와 동일
\w: [a-zA-Z0-9]와 동일
[a-zA-Z]는 알파벳 소문자, 대문자 캐릭터 1개를 매칭시켜준다.
여기에 Quantifier를 붙여서 사용할 수 있다.
/[a-zA-Z]+/는 알파벳 소문자, 대문자 캐릭터 1개 이상을 의미한다.
[abc]: a 또는 b 또는 c, (a|b|c)와 동일하다.
[^abc]: a,b,c를 제외한 나머지
Capturing, grouping
(ab)+ : "ab"라는 1개 이상 매칭되어야 한다.
만약 ab+라고 한다면 a 그리고 다음 b가 1개이상인 문자열이라 abbbbbbb이런 것인데
(ab)+ 는 ababab.. 이런 문자열이 매칭될것
(a|b)는 [ab]와 의미상 같다. a또는 b
연습
연습을 위한 사이트는 regex101이 있다.
email은 abcd@gmail.com 처럼 되어 있다.
크게 패턴으로 나누면
1개 이상의 텍스트, @, 1개 이상의 텍스트, dot, 1개 이상의 텍스트
/.+@.+\..+/;
8자리 이상의 패스워드
8자리 이상, 32자리 이하의 패스워드
/.{8,32}/
Full matching
정규식에 맞게 텍스트 전체가 맞는지 확인하려면
/^패턴.....$/
처럼 맨앞에 시작과 끝을 명확하게 지정해주면 된다.
js에선 그냥 match, test밖에 없지만, fullMatch같은 함수를 제공해주는 것이 바로 위처럼 하는 것