-
정규표현식이 무엇일까??JavaScript 2022. 9. 1. 15:36
코딩 테스트를 하거나 프로젝트를 할때 문자열을 판별해본 경험은 한번쯤은 있었을 것이다.
그때마다 괴상한 코드를 통해 문자열을 비교하는데 그 괴상한 코드가 바로 정규표현식 또는 정규식 이라고 불리는 문자 조합을 찾기 위한 패턴이다.정규 표현식
JavaScript에서는 정규 표현식도 객체로서, RegExp, exec(), text() 메서드를 사용할 수 있다.
String의 match(), matchAll(), replaceAll(), search(), split() 메서드와도 함께 사용할 수 있다.
출처: mdn 공식 문서이처럼 정규표현식과 다양한 메서드를 사용하면 내가 찾고자 하는 문자열 혹은 문자열끼리의 비교가 가능하다.
정규표현식을 만드는 방법에는 두가지 방법이 있다.리터럴, 슬래시 패턴을 감싸서 작성하는 방법
const re = /ab+c/
RegExp 객체의 생성자 호출
const re = new RegExp('ab+c')
만약 정규 표현식이 바뀔일이 없는 고정된 표현식이라면 리터럴(슬래시)을 사용하면 성능 향상에 도움이 되지만,
반대로 정규 표현식이 바뀌는 패턴이나, 사용자 입력 등 외부 출처에서 가져오는 패턴이라면 생성자를 통해 사용하는 것이 권장된다.정규 표현식의 특수문자 조합
정규 표현식이 무엇인지 알아보았으니 이제 실제로 정규표현식을 작성해보고자 한다.
먼저 정규표현식을 작성하기 위해 지원하는 조합을 알고있어야 한다.
지원하는 조합이 매우 많기 때문에 모든 것을 외우는 것이 아닌 지원하는 조합을 보며 적절한 상황에 알맞게 조합을 선택하여 사용해야 한다.
Mdn web docs
모든 조합을 보고 싶다면 위 링크를 통해 참고해보는 것도 좋다.여기서는 자주 사용하거나 내가 사용해보았던 것을 위주로 작성해보고자 한다.
유튜브에 드림코딩의 RegExp의 영상이 매우 잘 만들어져 있었기 때문에 영상을 찾아보는 것 또한 매우 추천한다.
츌처: https://github.com/dream-ellie/regex그룹과 범위
조합 뜻 X | Y X 또는 Y ( X ) X를 그룹화 [ X ] 문자셋, 괄호안의 X [ ^X ] 부정 문자셋, 괄호안의 X가 아닌 문자 ( ?:X ) X를 찾지만 이를 그룹화를 하지 않는다. 한정자
조합 뜻 X? X가 존재하거나 존재하지 않거나 X* X가 여러개 존재하거나 존재하지 않거나 X+ X가 하나 이상 존재하거나 여러개 존재하거나 X{ n } X가 n번 반복하는 것을 찾음 X{ min, } X가 최소 min번 반복하는 값을 찾음 X{ min,max } X가 최소 min번 이상 max번 이하로 반복한 값을 찾음 경계 타입(Boundary-type)
조합 뜻 \b 문자와 공백사이의 문자를 찾는다. \B 문자와 공백사이가 아닌 값을 찾는다. ^ 문장의 첫 글자를 찾는다. $ 문장의 끝 글자를 찾는다. 문자 클래스(Character classes)
조합 뜻 \ 특수문자가 아닌 문자 . 아무 글자 한개를 찾음 \d 숫자인 값을 찾음 \D 숫자가 아닌 값을 찾음 \w 알파벳+숫자인 값을 찾음 \W 공백+특수문자인 값을 찾음 \s 공백 문자를 찾음 \S 공백이 아닌 문자를 찾음 플래그
조합 뜻 g 모든 문자열 i 대소문자 구분 없이 m 여러행 검색 s ' . '에 개행 문자도 매칭 u 패턴을 유니코드로 취급 y 문자열의 현재 위치부터 검색 수행 예제
아래와 같이 해시태그가 있다면 각 해시태그에 링크를 달아주고자 한다.
단! #이 연속으로 있으면 마지막 #을 제외한 나머지 #은 기능이 없으며 문자가 붙어있을 경우에는 각 #을 기준으로 알맞게 나눠줘야 한다.
변환 전
#해시태그1 ##해시태그2 #해시태그3#해시태그4
변환 후
#해시태그1 ##해시태그2 #해시태그3#해시태그4
정답
더보기const reg = /#([^\s#]+)/g
후기
정규표현식을 처음 보면 가독성이 좋지 않아 이게 어떤 문자열을 찾는지 단번에 알지는 못한다.
또한 정규표현식은 다양하게 작성될 수 있는데 이말인 즉슨 본인의 실력이 좋다면 짧은 코드로 작성을 할 수 있지만,
실력이 좋지 않다면 길게 작성해야 될 수도 있다는 것이다.
현재 까지도 정규 표현식을 효과적으로 짧게 작성하는 것에 어려움을 느껴 꾸준히 공부를 하고 있지만
매번 모범답안을 보면 작성자의 실력에 감탄을 할때가 많다.
'JavaScript' 카테고리의 다른 글
클래스에서 바인딩 현상이 발생하였을 때 (0) 2022.12.28 ES5의 생성자 함수 (0) 2022.12.26 getter & setter 를 사용해 보자! (0) 2022.08.26