벌써 1주차 프리코스가 끝을 향해간다. 오늘부터 제출이 가능했는데, 나는 아직 제대로 작성한 코드가 없기 때문에 제출할 수 없다. 리드미는 약간 뒤로 미루더라도, 지금까지 정한 내용을 기반으로 코드를 먼저 구현하기로 했다.
제출 기한은 내일 24시까지이다. 짧지만 남은 기간동안은 제대로 코드를 짜보려 한다.
정규표현식을 활용한 문자열 탐색
어떻게 해야 문자열에서 빠르게 구분자를 찾아내고, 이걸 문자열에 적용할 수 있을지를 떠올리려고 했다. 일반적으로 순회할까 했었으나, 오류가 생기는 케이스의 경우에는 예외처리할 일이 많았다.
즉, 일반적인 문자열 입력 양식과 일치하는 지를 파악해야 하는데, 이걸 정규식으로 하는게 가장 편하겠다는 생각이 떠나지를 않았다. 아무래도 우테코 디스코드에서 본 정규식 관련 글이 큰 힌트가 된 듯하다.
정규표현식의 기본 문법
const regex = /pattern/m;
정규식도 일반적인 문자열처럼 작성하긴 하나, 따옴표 대신 슬래시를 사용한다고 한다. 이 안에 들어있는 문자들로 정규식을 나타낼 수 있고, 뒤에 적힌 플래그라는 문자로 어떻게 해석할지에 힌트를 주는 형식이다.
다만 이렇게 선언하게 되면 정규 표현식을 정적으로 이용하기 때문에, 리터럴을 이용하기 위해서는 정규식 객체를 만들어야 한다.
const regex = new RegExp("pattern", "flags");
플래그
플래그는 여러 개가 쓰일 수 있다.
- i: 대소문자 차이를 두지 않고 검색한다.
- g: 패턴과 일치하는 모든 것을 찾아낸다. 원래는 패턴과 일치하는 첫 번째 결과만을 반환한다.
- m: 다중 행 모드를 활성화한다. 즉 여러 줄에서도 이용이 가능하다.
- s: .이 나타내는 값에 \\n도 포함한다. (dotall 모드)
- u: 유니코드 전체를 지원한다.
- y: 문자 내의 특정 위치에서 검색을 진행하는 sticky 모드를 활성화한다.
이 플래그들 중에서 가장 필요한건 아무래도 s와 u가 아닐까 싶다.
내가 처음에 계획했던 바대로 하기 위해서는 줄바꿈 문자가 커스텀 구분자에도 포함이 될 수 있어야 하며, “문자”의 정의를 유니코드로 하려고 했기에 이 두 플래그는 우선적으로 필요하다.
필요에 따라 m도 필요할 듯하다. 만약 구분자가 \n인 경우, 입력이 계속해서 줄바꿈이 되기 때문에 여러 행에 대해서도 정규표현식을 적용할 수 있어야 한다.
패턴
정규표현식에서 패턴을 만들때는 메타 문자를 이용하여 구성할 수 있다.
정규표현식 패턴 관련해서는 외우기 보다는 찾아가면서 하는게 낫다고 생각해서, 매번 검색해보는 편이다. 아래 링크에서 참고해서 구성해봤다.
https://velog.io/@purplew/Javascript-정규표현식
정규 표현식의 활용
나는 이 정규표현식을 이용하여, 커스텀 구분자가 달린 정규표현식을 만들고 이를 문자열에 각각 적용하여 커스텀 구분자 여부를 알아낼 것이다. 나는 커스텀 구분자가 존재하는지 알아내는 정규식을 아래처럼 짰다.
const regex = /^(\\/\\/[.]{1}\\\\n)[.]*/m;
reg.test(str)
문자열이 정규식을 만족시키는지 확인하는 메소드이다. 결과는 bool값으로 반환되며, 이걸로 내가 원하는대로 출력이 되는지를 파악해볼 수 있다.
'일기장 > 우아한테크코스 7기' 카테고리의 다른 글
10월 22일: 2주차 프리코스 알아보고 기능 정리하기 (1) | 2024.11.05 |
---|---|
10월 21일: 1주차 프리코스 마무리 (0) | 2024.11.04 |
10월 19일: 문제 정의하고 README.md 작성하기 (2) | 2024.11.02 |
10월 18일: 주어진 라이브러리를 분석하고 코드 짜기 (0) | 2024.11.01 |
10월 17일: 코드의 목표 설정 및 실제 코드 작성하기 (0) | 2024.10.31 |