문제설명 클릭



내가 푼 내용

function solution(new_id) {
    new_id = new_id.toLowerCase()
            .replace(/[^0-9-_.a-z]/g, '')
            .replace(/[.]{2,}/g, '.')
            .replace(/^[.]/g, '')
            .replace(/[.]$/g, '')
            .replace(/^$/g, 'a')
            .substring(0,15)
            .replace(/[.]$/g, '')
            
    let lastStr = new_id.charAt(new_id.length - 1)
    for(let i= new_id.length; i<3; i++){
        new_id += lastStr;
    }
    return new_id;
}

문제 자체는 어렵지 않았으나, 정규식표현에 익숙지 않아서 꽤 고생했다ㅠㅠㅠㅠ
처음에는 체이닝 없이 진행했었는데,
하다보니까 체이닝으로 가능할 것 같아서 체이닝으로 바꿔서 진행했다.
문제에 맞춰 정규식표현만 잘 짜면 해결되는 문제였다 ㅎㅎ



다른 사람들의 정답 코드

function solution(new_id) {
    const answer = new_id
        .toLowerCase() // 1
        .replace(/[^\w-_.]/g, '') // 2
        .replace(/\.+/g, '.') // 3
        .replace(/^\.|\.$/g, '') // 4
        .replace(/^$/, 'a') // 5
        .slice(0, 15).replace(/\.$/, ''); // 6
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}



나와 동일하게 정규식을 사용하셨는데,
문자열 맨 앞과 맨 뒤의 .을 구별하는 것을 하나로 합쳐서 하셨다… 신기방기…
그리고 repeat 메서드를 사용했다.
repeat메서드는 string.repeat( count ) 의 형태로 사용하며,
문자열을 반복한 값을 반환하는 메서드라고 한다!

정규표현식에 대해 잘 몰랐는데, 이번 기회에 전부 다는 아니어도 조금은 알아야겠다고 생각했다.. ㅠㅠ
구글링하면서도 너무 헷갈렸다!ㅠㅠㅠㅠㅠㅠ
그리고 새로 알게된 repeat 메서드! 기억하자!!!