오늘은 알고리즘 관련 문제를 대량 풀었는데, 그 중 새로 알게된 한 가지 개념에 대해 간단하게 적어보려 한다.
1. 정규 표현식 (RegExp)
정규 표현식의 영어식 축약어 (RegExp)의 정식 이름은 Regular Expression이라고 한다. 보통 이 표현을 '정규식'으로도 많이 부른다.
정규식이 뭐고 그 사용법이 궁금해서 계속 구글링하여 얻은 정보로는, 우선 정규식은 POSIX, PCRE 등 다양하게 존재한다는 것이다.
* 프로그래밍 언어별로 사용되는 정규식 표현의 명칭들과 엔진들을 비교/정리해 놓은 사이트가 있다.
그 중 Javascript에서는 XRegExp 을 따른다는 것이다. (영어 원문)
정규식을 구성하는 문법들이나 메소드들은 굉장히 많고 아직 많이 익숙하지 않아 오늘 풀은 예제를 놓고 보도록 하자.
* 문제는 이와 같다 : 문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 한다.
이 문제의 까다로운 부분은 바로 아래 입출력 예시와 같이 연속된 공백이 있다는 점에서 처리하기가 어려웠다.
본 문제의 가장 간단한 풀이 방법으로는 split() 메소드를 통해 단어들과 빈 스트링들을 구분시켜주면 문제를 단순하게 해주는 방법이 있다.
1) 문자열을 각 단어들의 배열로 쪼개준다.
2) 반복문을 통해 문자열의 모든 문자들에 접근/순회한다.
3) 각 단어의 첫글자를 대문자로 만들어주고,
4) 다시 하나의 문자열로 합쳐준다.
* 이 방법은 문제 윗부분에 주석으로 처리해놨다.
하지만 필자는 문제 풀이 방법을 구글링 하던 도중 처음 보는 표현법 (RegExp)가 있어 글을 읽어보다가 바로 사용을 해봤다.
작성한 정규식의 설명을 먼저 하자면 :
1) ^는 문자열의 처음과 매칭시켜주고,
2) \w는 그 어떤 단어 문자열과 매칭시켜 준다.
3) {1}은 단어의 첫번째 문자를 가져온다.
4) 따라서, ^\w{1}은 해당 단어의 첫번째 문자를 매칭시켜준다.
5) | 는 OR 연산자와 비슷한 원리로, | 이전의 표현과 이후의 표현을 이어준다.
6) \s+ 는 단어들 사이에 있는 연속된 공백을 포함한 모든 공백들을 매칭시켜준다.
7) , 뒤에 나온 letter 와 화살표 함수를 통해 letter들만 toUpperCase() 메소드로 대문자를 만들어주면 문제가 풀린다.
정규식 표현 (RegExp)를 통한 문제 풀이 방법은 한줄 길이라 신기하고 간단해보일 수 있지만 지금 더 알아볼수록 느끼는 건데, 정말 고난이도 개념인 것 같다. 이토록 쉬운 개념이 아니기 때문에 그렇게 많이 쓰이지는 않는 것 같다.
* 코드의 가독성이 언제나 먼저다.
하지만, 정규식 표현에 대해서 더 공부하고 싶다면 이 사이트를 이용해보길 바란다. 정규식으로 실험을 해볼 수 있는 곳이다. (영어 원문)
지금까지 소개한 방법 이외에 map() 메소드를 사용할 수도 있고, 아직 익숙하지 않은 ASCII 코드를 활용하는 방법도 있다.
조만간 ASCII 코드 관련해서 정리글을 올려보도록 하겠다. 그때까지 더 열공, 열코하기.
'Programming > TIL' 카테고리의 다른 글
비동기 호출 Asynchronous (0) | 2020.11.17 |
---|---|
유효성 검사 [Validation Check] (0) | 2020.11.13 |
Higher Order Function [고차함수] 2편 (0) | 2020.11.09 |
HTML 구성 전 와이어프레임 설계 및 Mock-up 구현 (0) | 2020.11.06 |
Git (0) | 2020.11.05 |