프로그래머스에서 문제를 풀면 그 문제에 해당하는 다른 사람의 풀이를 볼 수 있는데,
내가 반복문과 조건문으로 비교적 복잡하게 푼 문제들을
나에겐 익숙하지 않은 정규 표현식을 사용해 간단하게 풀이한 코드가 많이 보였다.
그래서 정규 표현식에 대해 더 알아보고 정리하고자 글을 쓴다.
간단한 형식만큼 가독성이 떨어진다는 문제점이 있지만,
사용자의 전화번호 검색, 패스워드 등록과 같은 특수한 상황에 정규 표현식이 유용하게 사용된다.
글의 마지막 부분에 이해를 돕기 위한 활용 예시를 하나 첨부하겠다.
정규 표현식이란 패턴(pattern) 과 선택적으로 사용할 수 있는 플래그(flag) 로 구성되며,
문자 검색과 교체에 사용되는 패턴으로 강력한 기능을 제공한다.
외운다기 보다, 문서를 보고 응용할 수 있게 한다는 생각으로 공부하자.
정규 표현식을 만드는 방법
1. 정규 표현식 리터럴
const regexp = /pattern/flag/;
슬래시로 패턴을 감싸서 작성한다.
바뀔 일이 없을 때 사용.
2. RegExp 객체의 생성자 호출
const regexp = new RegExp( /pattern/flag );
바뀔 일이 있거나 사용자 입력의 경우 사용.
정규 표현식엔 검색에 영향을 주는 플래그(flag)를 선택적으로 붙일 수 있다.
다음은 자주 사용하게 될 대표적인 플래그 3개이다.
메타 문자의 종류는 엄청 많다. 사진 보단 밑에 mdn링크를 참고하자.
다음은 mdn에서 제공하고 있는 regular expression에 대한 통합 cheat sheet이다.
이 문서를 잘 활용해 정규식에 익숙해지자.
Regular expression syntax cheat sheet - JavaScript | MDN
This page provides an overall cheat sheet of all the capabilities of RegExp syntax by aggregating the content of the articles in the RegExp guide. If you need more information on a specific topic, please follow the link on the corresponding heading to acce
developer.mozilla.org
RegExp.test()
regexObj.test(str)
주어진 문자열이 정규 표현식을 만족하는지 판별하고,
그 여부를 true 또는 false로 반환
str : 정규 표현식 일치를 수행할 문자열.
정규표현식이 유용하게 사용되는 문제 예시이다.
필자가 작성한 코드와 정규표현식을 사용한 코드를 비교해보자.
function solution(phone_number) {
let open=[];
for(let i=0;i<phone_number.length-4;i++){
open.push("*");
}
for(let i=0;i<4;i++){
open.push(phone_number[phone_number.length-4+i]);
}
let answer=open.reduce((pre,cur)=>pre+cur)
return answer;
}
다음은 정규표현식을 사용한 풀이이다.
function solution(s){
return s.replace(/\d(?=\d{4})/g, "*");
}
코드가 확 줄어 간단해진 것을 확인할 수 있다.