[RegExp] 정규 표현식

김정현·2023년 1월 4일

개념 정리

목록 보기
9/9
post-thumbnail
\d - 숫자 대표
\w - 글자 대표
\s - 공백 문자(스페이스, 탭, 뉴라인) 대표
\D - 숫자를 제외한 문자
\W - 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)
\S - 공백 문자를 제외한 문자

{n} - n회 반복
{n, m} - n회 ~ m회 반복
[abc] - 'a', 'b', 'c' 선택 (하나 이상의 문자 선택)
[a-z] - 'a'에서 'z'까지 선택 (알파벳 소문자 선택)
[가-힣] - '가'에서 '힣'까지 선택 (한글 전체 선택)
? - 있는 경우, 없는 경우 모두 선택
+ - 하나 이상
* - 0개 이상
\ - 뒤에 나오는 문자를 단순한 문자열로 취급한다는 의미
^ - 문자열이나 행의 처음을 의미
$ - 문자열이나 행의 끝을 의미
[] - 대괄호 안의 문자열의 요소들을 의미, -와 함께 사용하여 범위를 나타낼 수도 있다
| - 또는
*예시1

let searchTarget = "탐색할 문자열"
let regex = /\d+/g;    
console.log(searchTarget.match(regex));
*예시2

<조건>
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
     만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
---

풀이1
function solution(new_id) {
    let answer = '';
    
    answer = new_id.toLowerCase();
    answer = answer.replaceAll(/[^a-z0-9-_.]/g, "");
    answer = answer.replaceAll(/\.{2,}/g, "."); // "."는 특수문자이기 때문에 .앞에 \를 붙혀 사용함. 일반 분자의 경우 answer.replaceAll(/a{2,}/g, 'a')
    answer = answer.replaceAll(/^\.|\.$/g, "");
    if(!answer) answer = "a";
    if(answer.length > 15) answer = answer.slice(0, 15);
    if(answer[14] === ".") answer = answer.slice(0, 14);
    if(answer.length <= 2) while(answer.length < 3) answer = answer + answer[answer.length - 1]
    
    return answer;
}
---

풀이2
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);
}

참고 자료: https://school.programmers.co.kr/learn/courses/11/11-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D

profile
개발 공부 블로그

0개의 댓글