본문 바로가기

Programming/TIL

정규표현식 RegExp

오늘은 알고리즘 관련 문제를 대량 풀었는데, 그 중 새로 알게된 한 가지 개념에 대해 간단하게 적어보려 한다.

 

1. 정규 표현식 (RegExp)

정규 표현식의 영어식 축약어 (RegExp)의 정식 이름은 Regular Expression이라고 한다. 보통 이 표현을 '정규식'으로도 많이 부른다.

 

정규식이 뭐고 그 사용법이 궁금해서 계속 구글링하여 얻은 정보로는, 우선 정규식은 POSIX, PCRE 등 다양하게 존재한다는 것이다.

* 프로그래밍 언어별로 사용되는 정규식 표현의 명칭들과 엔진들을 비교/정리해 놓은 사이트가 있다.

그 중 Javascript에서는 XRegExp 을 따른다는 것이다. (영어 원문)

 

정규식을 구성하는 문법들이나 메소드들은 굉장히 많고 아직 많이 익숙하지 않아 오늘 풀은 예제를 놓고 보도록 하자.

 

RegExp 응용 문제

* 문제는 이와 같다 : 문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 한다.

이 문제의 까다로운 부분은 바로 아래 입출력 예시와 같이 연속된 공백이 있다는 점에서 처리하기가 어려웠다.

 

입출력 예시

 

본 문제의 가장 간단한 풀이 방법으로는 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 코드를 활용하는 방법도 있다.

 

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