ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규식 연습
    간단기법 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

    email은 abcd@gmail.com 처럼 되어 있다.
    
    크게 패턴으로 나누면
    1개 이상의 텍스트, @, 1개 이상의 텍스트, dot, 1개 이상의 텍스트
    
    /.+@.+\..+/;

    8자리 이상의 패스워드

    8자리 이상, 32자리 이하의 패스워드
    
    /.{8,32}/

    Full matching

    정규식에 맞게 텍스트 전체가 맞는지 확인하려면

    /^패턴.....$/
    처럼 맨앞에 시작과 끝을 명확하게 지정해주면 된다.
    
    js에선 그냥 match, test밖에 없지만, fullMatch같은 함수를 제공해주는 것이 바로 위처럼 하는 것

    참고

    댓글

Designed by Tistory.