유용한 regex(정규표현식)

아래 분문은

- https://welchsy.tistory.com/22

- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

글을 참조하였습니다.


정규표현식은 실무에서도 일정한 패턴의 무언가를
검사(test), 치환(replace), 찾기(match)를 할 때 속도도 빠르고
(string을 다 split해서 method를 적용시키는 것보다)
코딩테스트에서도 복잡해 보이는 걸 간단하게 만들어준다. 
**물론 정규표현식에 대한 이해도가 높을 경우에 간단해 보이는 것이다.


쓸만한 정규표현식(regex)


시작, 종료

  • ^ : 시작

  • $ : 종료

    var string = 'abcdabcd';
    var match_arr = string.match(/^b/);
    console.log(match_arr);
    /* 결과값 : null */
    match_arr = string.match(/^a/);
    console.log(match_arr);
    /* 결과값 : ["a"] */

    match_arr = string.match(/b$/);
    console.log(match_arr);
    /* 결과값 : null */
    match_arr = string.match(/d$/);
    console.log(match_arr);
    /* 결과값 : ["d"] */


[]


  • [<문자 : ex) abc, ㄱㄴㄷ>] : 괄호안의 문자와 맞는 것. (abc : a or b or c)

  • [^<문자 : ex) abc, ㄱㄴㄷ>] : 괄호안의 문자가 아닌것. (abc : !a and !b and !c)

  • [문자1-문자2] : 문자1 부터 문자2 까지 (a-z : a부터 z까지, 0-9 : 0부터 9까지)

    var string = 'abcdabcd';
    var match_arr = string.match(/[abc]/);
    console.log(match_arr);
    /* 결과값 : ["abc"] */
    match_arr = string.match(/[^abc]/);
    console.log(match_arr);
    /* 결과값 : ["d"] */
    match_arr = string.match(/[a-c]/);
    console.log(match_arr);
    /* 결과값 : ["abc"] */


|


  • (abc|abcd) : |의 좌측, 우측 문자 중 맞는 것. (abc or abcd)
    var string = 'abcdabcd';
    var match_arr = string.match(/(abc|efg)/);
    console.log(match_arr);
    /* 결과값 : ["abc", "abc"] */


반복 (*, +, ? , {n}, {n,}, {n,m})


  • ? : 앞 패턴이 0회 또는 1회 반복되는 것을 찾음.

  • * : 앞 패턴이 0회 또는 그 이상 반복되는 것을 찾음.

  • + : 앞 패턴이 1회 또는 그 이상 반복되는 것을 찾음.

    var string = 'abcdeabcdabcabcd';
    var match_arr = string.match(/(abc)*/g);
    console.log(match_arr);
    /* 결과값 : ["abc", "", "", "abc", "", "abcabc", "", ""] 0회부터 그 이상 */

    match_arr = string.match(/(abc)+/g);
    console.log(match_arr);
    /* 결과값 : ["abc", "abc", "abcabc"] 1회 이상만 */

    match_arr = string.match(/(abc)?/g);
    console.log(match_arr);
    /* 결과값 : ["abc", "", "", "abc", "", "abc", "abc", "", ""] 0회 또는 1회만 */
  • {n} : 앞 패턴이 n회 반복되는 것을 찾음.

  • {n,} : 앞 패턴이 n회이상 반복되는 것을 찾음.

  • {n,m} : 앞 패턴이 n회이상부터 m회 이하까지 반복되는 것을 찾음.

    match_arr = string.match(/(abc){2}/);
    console.log(match_arr);
    /* 결과값 : ["abcabc"] 2회반복 (현 string 에서는 3회 반복이므로 짤려서 match_arr[1] 에도 들어감.) */

    match_arr = string.match(/(abc){3,}/);
    console.log(match_arr);
    /* 결과값 : null 3회이상 반복 (abc<b>d</b>abcabc 이므로 null) */

    match_arr = string.match(/(abc){1,2}/g);
    console.log(match_arr);
    /* 결과값 : ["abc", "abc", "abcabc"] 1회이상 2회이하 반복 */


모든 한개


  • . : 모든 것 하나(다음 것이라든지 . 찍는 위치에 따라)
    var string = 'abcdabcd';
    match_arr = string.match(/^a./);
    console.log(match_arr);
    /* 결과값 : ["ab"] */


특수문자


  • \ : []와 같이 패턴으로 정립되어있는 문자들을 진짜 string 안의 문자로 찾고 싶을 때 \[\] 과 같은 형태로 만들어 줌.

  • \s : 공백 문자.

  • \S : 공백 문자 빼고 전부.

  • \w : 알파백문자,숫자,_

  • \W : 알파백문자,숫자,_ 빼고 전부.

  • \d : 정수

  • \D : 정수 빼고 전부.


플래그 (flag)


  • g(global) : 패턴에 맞는 모든 문자를 찾는다.

  • i(ignore case) : 대소문자 가리지 않는다.

    var string = 'abcdabcd';
    var match_arr = string.match(/a/**g**);
    console.log(match_arr);
    /* 결과값 : ["a","a"] */
    string = 'abcdAbcd';
    match_arr = string.match(/a/**gi**);
    console.log(match_arr);
    /* 결과값 : ["a","A"] */