https://programmers.co.kr/learn/courses/30/lessons/72410
function solution(new_id) {
let answer = new_id
.toLowerCase() //step 1
.replace(/[^0-9a-z._-]/g, "")
// step 2 : ^를 []안에 넣으면 아닌 것들 replace
.replace(/\.+/g, ".")
//step 3 : .이 연속인 것들
.replace(/^\.|\.$/g, "")
//step 4 : ^이 처음
.replace(/^$/, "a") //step 5
.slice(0, 15)
.replace(/\.$/, ""); //step 6
// step7
if (answer.length === 1) answer = answer[0].repeat(3);
if (answer.length === 2) answer = answer + answer[1];
return answer;
}
문제 : 시간 초과
function solution(new_id) {
//1단계
let answer = new_id.toLowerCase()
//2단계
var regEmail = /^[a-z0-9-_.]$/;
answer = answer.split('').filter(el => regEmail.test(el)).join('')
//3단계
answer = answer.replace(/\.\./gi, '.')
//4단계
if(answer==='.'){
answer=''
}else{
for(let i=0; i<answer.length; i++){
if(answer[i]!=='.'){
answer = answer.slice(i)
break;
}
}
for(let i=answer.length-1; i>=0; i--){
if(answer[i]!=='.'){
answer = answer.slice(0, i+1)
break;
}
}
}
//5단계
if(answer.length === 0)answer='a';
//6단계
if(answer.length >=16)answer = answer.slice(0,15)
if(answer[answer.length-1]==='.')answer = answer.slice(0, answer.length-1)
if(answer.length<=2){
while(answer.length<3){
answer += answer[answer.length-1]
}
}
return answer;
}
\d : 숫자를 찾아내는
\w : 글자를 대표하는 정규표현식입니다.
ex. a, b, c, 가, 나, 다, 1, 2와 같은 문자와 숫자를 포함합니다.
특수문자는 포함하지 않지만, _(언더스코어)는 포함합니다.
+: 하나 혹은 그 이상 연결된
ex. \d+ : 전화번호를 구성하는 043이나 2568같이 연결된 숫자
'*' : 0개 이상
[]: 안에 있는 것들을 옵션으로 준다
ex. \d는 "숫자가 0개 이상이다"를 의미합니다.
이를 이용하면 자연수는 [1-9]\d로 표현할 수 있습니다.
?: '있거나 없거나'라는 뜻입니다.
ex. -?: "-가 있거나 없다"
따라서 이를 연속하는 숫자는 \d+와 조합하면 전화번호를 찾는 정규표현식을 만들 수 있습니다.
\d+-?\d+-?\d+
-또는 (공백)이 있거나 없다는 조건은 [- ]?로 표현할 수 있습니다.
\d+[- ]?\d+[- ]?\d+
{숫자}: "숫자번 반복한다"는 뜻입니다.
ex. \d{2}는 "숫자가 연속 두 번 나온다"는 뜻입니다
{숫자1, 숫자2}: "숫자1부터 숫자2까지 반복한다"는 뜻입니다.
ex. \w{2,3}는 "문자가 2 ~ 3번(개수) 나온다"는 뜻입니다.
알파벳 중에 소문자 모음(a,e,i,o,u)만 고르고 싶을 때
: [aeiou]
[a-z]는 "a부터 z까지 글자를 모두 선택하라"는 의미입니다.
연속된 영어 소문자: [a-z]+
연속된 한글 : [가-힣]+
\s 공백 문자(스페이스, 탭, 뉴라인)
\S 공백 문자를 제외한 문자
\D 숫자를 제외한 문자
\W 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)
자바스크립트는 match라는 함수를 쓴다
문자열.match(/정규표현식/g)를 쓰면 일치하는 모든 내용을 찾아올 수 있다
g는 global의 약자로, 정규표현식과 일치하는 모든 내용을 찾아오라는 옵션입니다.
var regex = /\d/g
console.log(searchTarget.match(regex));
/[^0-9a-z._-]/g : 0~9, a~z, ., _, - 가 아닌 것들 모두
/\.+/g : .이 연속으로 있는 것들 모두
/^\.|\.$/g : 시작에 .이 있거나 끝에 .이 있을 때
정규표현식 : // + ^(시작) + .(내용) + |(또는) + .(내용)$(끝)
/^$/ : ''
빈문자열일 때만 의미함
/.$/ : 문장 마지막에 있는 .
ex. 전화번호
1. 데이터의 시작점(^)
2. 비캡처 그룹((?:))으로
repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환합니다.