마침 정규 표현식에 대해 공부하는 중이었는데 이에 대해 연습할 수 있는 문제였다.
그냥 단계별로 정규 표현식을 적용하면 문제를 해결할 수 있다.
- ~이외는 [^]로 표현하고, (^)은 시작을 ($)은 끝을 표현한다.
- replace를 통해 값을 변환할 때 표현식을 만족시키는 패턴이 한 개 이상 있는지 검사하기 위해서
g flag
를 붙여주었다.1단계에서 toLowCase()로 소문자 변환을 해주기때문에 i flag는 고려할 필요가 없다.
function solution(new_id) {
var answer = '';
// 1단계- 대문자있으면 모두 소문자로 변환
answer = new_id.toLowerCase();
// 2단계- 소문자, 숫자, -_. 을 제외한 모든 문자 제거
answer = answer.replace(/[^a-z0-9-_.]+/g, '');
// 3단계- (..) -> (.) 변환
answer = answer.replace(/\.\.+/g, '.');
// 4단계- 마지막에 마침표(.)있으면 제거
answer = answer.replace(/^\.|\.$/g, '');
// 5단계- 빈 문자열이면 'a' 대입
if (answer === '') answer = 'a';
// 6단계- 길이가 16자 이상이면 15개로 변환 후 끝에 (.)있으면 제거
if (answer.length > 15) {
answer = answer.substr(0, 15);
answer = answer.replace(/\.$/g, '');
}
// 7단계- 길이가 2자 이하면 3자가 될 때까지 마지막 문자 더해주기
while (answer.length < 3) {
answer = answer + answer[answer.length - 1];
}
return answer;
}
제 코드는 수많은 답 중 하나일 뿐입니다.
풀이에 문제가 있거나 더 좋은 방식이 있다면 공유해주세요 😀