ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [정규식] 정규식 이해하기 (Regular Expression)
    카테고리 없음 2020. 7. 17. 11:19

    * 정규식 (Regular Expression)

    프로그래머스에서 알고리즘 문제를 풀고 나면, 다른 사람들의 풀이를 볼 수 있다. 그 중에 신기한 것을 보게 되었는데 그건 바로 정규식(Regular Expression)이었다. MDN 에서는 정규식을 아래와 같이 설명하고 있다.

    정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.  이 패턴들은 RegExp exec 메소드와 test 메소드  ,그리고 String의  match메소드 , replace메소드 , search메소드 ,  split 메소드와 함께 쓰입니다 .

     

    * 정규식 패턴 설정하기 (Compile)

    말하자면 문자열에서 1. 패턴을 설정(compile)한 후 2. 이를 실행(execution)하는 방법이라고 이해할 수 있을 것 같다. 먼저 패턴을 설정하는 방법은 아래의 두 가지 방법이 있다.

    // 정규표현식 리터럴
    let pattern = /a/;
    
    // 정규표현식 객체 생성자
    let pattern = new RegExp('a');

     

    * 정규식 실행 (Execution)

    패턴을 설정해두었다면 실행할 차례다. 주어진 문자열 내에서 설정한 패턴에 따라 아래와 같이 해당 부분을 '추출(exec)' 하거나 '검사(test)' 할 수 있다.  

    - RegExp.exec : 주어진 문자열 내에서 해당 요소가 있으면 해당 부분을 배열에 담아 추출하고 없으면 null 을 반환한다

    // RegExp.exec
    console.log(pattern.exec('abcde'); // ['a']
    console.log(pattern.exec('bcde'); // null
    

    - RegExp.test : 주어진 문자열 내에서 해당 요소가 있으면 true를, 없으면 false를 반환한다

    // RegExp.test
    console.log(pattern.test('abcde'); //true
    console.log(pattern.test('bcde'); //false

     

    * 문자열 메소드 실행 (match, replace)

    일부 문자열 메소드를 정규식에서 사용하는 것도 가능하다. 

    - String.match() : 주어진 문자열에서 패턴과 일치하는 부분을 배열에 담아 추출한다. RegExp.exec과 유사.

    // String.match()
    console.log('abcde'.match(pattern); // ['a']
    console.log('bcde'.match(pattern); // null
    

    - String.replace() : 주어진 문자열에서 패턴과 일치하는 부분을 찾아 변경한 값을 리턴한다. 첫 번째 인자에 패턴이, 두 번째 인자에 변경할 값이 들어간다.

    // String.replace()
    console.log('abcde'.replace(pattern, 'A'); // 'Abcde'
    

     

    * 옵션

    정규표현식 패턴을 설정할 때 몇 가지 옵션을 설정할 수 있다.  

    - i : i 를 붙이면 대문자, 소문자를 구분하지 않는다.

    // i 옵션 없음
    let xi = /a/;
    console.log('Abcde'.match(xi); // null
    
    // i 옵션 추가
    let oi = /a/i; 
    console.log('Abcde'.match(oi); // ['A']
    

    - g : g를 붙이면 일치하는 모든 값을 리턴한다.

    // g 옵션 없음
    let xg = /a/;
    console.log('abcdabcdA'.match(xg)); // ['a'] 
    
    // g 옵션 추가
    let og = /a/g;
    console.log('abcdabcdA'match(og)); // ['a', 'a']
    
    // i,g 옵션 동시 사용
    let oig = /a/ig;
    console.log('abcdabcdA'match(oig)); // ['a', 'a', 'A']
    

    - . : '.'을 붙이면 '문자열 1개'로 조건 설정 가능하다

    // '.' 사용한 패턴 설정
    let dot = /a./;
    console.log('abcde'.match(dot)); // ['ab']
    
    // '..'으로도 사용 가능
    let doubleDot = /a../;
    console.log('abcde'.match(doubleDot)); // ['abc']

     

    * 출처 :

    - 생활코딩 정규표현식(https://opentutorials.org/course/743/6580),

    - MDN (https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D)

    댓글