https://programmers.co.kr/learn/courses/30/lessons/72410
no | new-id | result |
---|---|---|
예1 | "...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
예1 | "z-+.^." | "z--" |
예1 | "=.=" | "aaa" |
예1 | "123_.def" | "123_.def" |
예1 | "abcdefghijklmn.p" | "abcdefghijklmn" |
match
되는 원소는 소문자로 변환한다.match
되는 원소만 걸러낸다..
이 2개 이상 연속되는 경우 변수의 값을 1
증가시킨다. .
의 연속이 끝나는 경우 선언한 변수만큼 배열을 splice
로 잘라낸다.shift
혹은 pop
을 이용하여 배열의 양 끝이 .
일 경우 배열의 양 끝을 자른다.push
한다.slice
로 배열을 잘라낸다. 이 때 배열의 맨 마지막 원소가 .
이면 잘라낸다.push
로 계속 밀어 넣는다.join
으로 문자화한다.function solution(new_id) {
let answer = "";
let arr = Array.from(new_id);
// 1단계
let regex = /[A-Z]/
arr = arr.map((el) => {
if (el.match(regex)) return el.toLowerCase();
else return el;
})
// 2단계
regex = /[a-z]|[0-9]|[-_.]/
arr = arr.filter((el) => {
return (el.match(regex))
})
// 3단계
let dotSequence = 0;
arr.forEach((el, idx, ar) => {
if (el === '.' && el === ar[idx + 1]) dotSequence++;
else {
ar.splice(idx - dotSequence, dotSequence);
dotSequence = 0;
}
});
// 4단계
if(arr[0] === '.') arr.shift();
if(arr[arr.length-1] === '.') arr.pop();
// 5단계
if(arr.length === 0) arr.push('a');
// 6단계
if(arr.length > 15) arr = arr.slice(0,15);
if(arr[arr.length-1] === '.') arr.pop();
// 7단계
if(arr.length <= 2) {
while(arr.length !== 3) {
arr.push(arr[arr.length-1]);
}
}
answer = arr.join("");
return answer;
}