76일차 - 정규표현식

김민찬·2021년 7월 24일
0

취업으로의 여정

목록 보기
77/196
post-custom-banner

날을 잡고 공부하고 싶어서 주말로 미뤄두었던 정규표현식을 공부했다.

생각보다 짧은 시간안에 공부할 수 있었다. 주말로 미뤄두긴 했지만, 평일에도 한번 봤어서, 시간을 들여서 공부했더니 금방 이해가 되었다.
하지만 JavaScript처럼 활용방안이 무궁무진해서, 내가 원하는 정규표현식을 빠르게 작성하려면, 더 많은 연습이 필요할 것이다.

드림코딩 by 엘리 "정규표현식"으로 공부하고 정규표현식 연습으로 연습해보면 많은 도움이 된다. 그리고 이 블로깅은 MDN regex를 참고했다.

우선 정규표현식을 사용하려면 정규표현식을 만드는 방법부터 알아야한다.

  • 리터럴 패턴
let re = /ab?/
  • 객체 생성자 함수 호출
let re = new RegExp("ab?");

이렇게 두 가지 방법이 있다.

정규표현식 내장 메서드도 두 가지 방법이 있다.

RegExp 객체의 메서드

  • exec()

원하는 정보를 찾아서 출력하는 메서드다.

let re = /h/;
re.exec('helloworld');

// 출력 값: ["h", index: 0, input: "helloworld", groups: undefined]

이렇게 찾고자하는 문자열이 있으면 배열로 출력하고, 없으면 null을 출력한다.

  • test()

찾고자 하는 문자열이 있으면 true 없으면 false 값을 출력한다.

let re = /z/;
re.test('helloworld');

//출력 값: false;

String 객체의 메서드

  • match()

exec()와 같은 기능을 하지만 정규표현식과 문자열의 위치가 바뀌었다고 생각하면 된다.

let re = /h/;
'helloworld'.match(re);

//출력 값: ["h", index: 0, input: "helloworld", groups: undefined]
  • replace()

두 번째 인자를 어떻게 바꿀건지를 넣으면 찾고자 하는 대상을 검색하서 바꾼 후 출력한다. 단, 원본은 바뀌지 않는다.

let re = /a/;
let alp = 'abcabc'
alp.replace(re, 'HI');

//출력 값: "HIbcabc"
  • search()

정규표현식을 인자로 받아 첫 번째로 일치하는 위치를 출력한다. 일치하는 문자열이 없으면 -1을 출력한다.

"HelloWorld".search(/Hello/); // 0
"HelloWorld".search(/hello/); // -1
"HelloWorld".search(/World/); // 5

flag는 검색 옵션이다.

6가지 종류가 있다. 그중 가장 자주 사용되는 3개는 아래와 같다.

Flag설명
g전역 검색
i대소문자 구분 없는 검색
m다중행 검색

만약 정규표현식에 flag를 넣고 싶으면 아래와 같이 작성하면 된다.

let re = /pattern/flags;

만약 pattern을 전역검색을 하면서 다중행 검색을 하고 싶으면

let re = /pattern/gm;

이런 식으로 여러가지 flag를 동시에 쓸 수도 있다.

문법들은 아래 github 주소가 정리가 너무 잘되있어서 아래 주소에서 참조하길 바란다.
regex 문법 정리

profile
두려움 없이
post-custom-banner

0개의 댓글