본문 바로가기

Development/TIL

match 메소드

문제

프로그래머스 문자열 다루기 기본 문제에서 정규표현식(regexp)을 사용해

주어진 문자열에서 숫자를 걸러내려고 시도했는데

일부 테스트에서 자꾸 에러가 발생

문제 링크

 

 

시도

function solution(s) {
    let reg = s.match(/\d/g);
    return reg.length === 4 || reg.length === 6 ? true : false
}

원래 문자열 s에서 숫자만 골라내서 길이가 4 또는 6이면 true를 반환하고 아니면 false를 반환하도록 했다.

하지만 실패했다.

 

 

다음 시도

function solution(s) {
    let reg = s.match(/\d/g) || [];
    return reg.length === 4 || reg.length === 6 ? true : false
}

match 메소드를 이용해 문자열 패턴 검색 시 찾을 수 없을 경우 null을 반환하기 때문에 에러가 발생해서

문자열 패턴이 없을 경우 빈 배열을 반환하도록 코드 추가. 하지만 또 실패

 

 

해결

function solution(s) {
    if (s.length === 4 || s.length === 6) {
        let reg = s.match(/\d/g);
        return s.length === reg.length ? true : false
    } else {
        return false
    }
}

너무 이상해서 문제를 다시 천천히 읽어보았다. 주어진 문자열 s에서 숫자를 걸러내어 길이가 4 또는 6이 되는 것이 아니라

걸러내기 전 s의 길이가 4 또는 6일 경우 숫자로만 구성된 것을 찾는 것이었다.

 

 

알게된 것

문제가 무엇인지 정확히 파악하기

match 메서드를 사용했을 때 결과 값이 없으면 null을 반환.

위의 경우 .length로 접근하면 에러 발생.

필요에 따라 빈 배열을 반환하도록 설정해줘야 함.

정규표현식(regexp)은 / /로 표현 \d는 0부터 9까지의 숫자를 의미

g를 붙이면 전체탐색

'Development > TIL' 카테고리의 다른 글

소수 구하기 (feat.에라토스테네스의 체)  (0) 2023.04.12
문자열과 영단어  (0) 2023.04.11
N진법 변환  (0) 2023.04.10
다중 배열  (0) 2023.04.07
올바른 TIL 작성에 대해  (1) 2023.04.07