문제
프로그래머스 문제
내 풀이
function solution(new_id) {
let id = new_id.toLowerCase();
id = id.replace(/[\~\!\@\#\$\%\^\&\*\(\)\=\+\[\{\]\}\:\?\,\<\>\\\/]/g, "");
id = id.replace(/\.{2,}/g, ".");
id = id.replace(/^\.|\.$/,"");
if(id.length === 0) id = "a";
id = id.slice(0,15);
id = id.replace(/^\.|\.$/,"");
if(id.length <= 2) id = (id + id[id.length-1].repeat(3)).slice(0,3);
return id;
}
개선점
- 정규식 넘 외우기 힘들다.
- .replace(/[^\w-_.]/g, '')
-> [^~] 이렇게 쓰면 ~를 제외한다는 의미이다.
-> 대괄호 없이 ^만 단독으로 쓰이면 문자가 ~으로 시작하는 문자라는 의미이다.
- \w -> 영어 + 숫자 + 언더바(_)
- /.+/ -> .이 1번이상 반복한다.
- /^$/ -> 빈 문자열
function solution(new_id) {
const answer = new_id
.toLowerCase()
.replace(/[^\w-_.]/g, '')
.replace(/\.+/g, '.')
.replace(/^\.|\.$/g, '')
.replace(/^$/, 'a')
.slice(0, 15).replace(/\.$/, '');
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}