프로그래머스 level1 - 5
내가 푼 내용
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 메서드! 기억하자!!!