[JavaScript] 정규표현식

aljongjong·2022년 1월 7일
0

학원 복습일지

목록 보기
66/84

정규표현식

정규 표현식
    
    <p>
        정규 표현식(Regular Expression)이란, <br>
        특정 규칙을 가진 문자열을 검색하거나 치환할 때 사용하는 형식 언어이다. <br><br>

        정규 표현식을 이용하면 입력된 문자열에 대해 특정 조건 검색이나 치환 시 복잡한 조건을 제시할 필요 없이 간단하게 처리가 가능하다.
    </p>

    <h2>1. 정규 표현식 객체 생성</h2>
    <p>
        정규 표현식 객체를 생성하기 위해서는 정규 표현식 리터럴과 RegExp 생성자 함수를 사용한다. <br>
        리터럴을 사용하는 것이 일반적이다. (/패턴/플래그)
    </p>

    <button id="btn1">실행 확인</button>
    <div id="area1" class="area"></div>
    
    // 1. 정규 표현식 객체 생성
    let btn1 = document.getElementById('btn1');

    btn1.addEventListener('click', () => {
        let area = document.getElementById('area1');
        // 생성자 함수를 이용한 정규 표현식 객체 생성
        // 생성자의 매개값으로 패턴을 문자열로 지정한다.
        let regExp1 = new RegExp('script');

        // 리터럴을 이용한 정규 표현식 객체 생성
        // 패턴 양쪽에 /로 작성한다.(시작 기호, 종료 기호)
        let regExp2 = /script/;
        let str1 = 'javascript jqueryscript ajax';
        let str2 = 'java jquery ajax';

        console.log(regExp1, typeof(regExp1), regExp1 instanceof RegExp);
        console.log(regExp2, typeof(regExp2), regExp2 instanceof RegExp);

        /*
            RegExp 객체에서 제공하는 메소드
                ** 객체.test(문자열) : 문자열에 정규식 패턴을 만족하는 값이 있으면 true, 없으면 false를 리턴한다.
                객체.exec(문자열) : 문자열에 정규식 패턴을 만족하는 값이 있으면 처음 매치된 문자열을 리턴한다.

            String 객체에서 정규 표현식 객체를 이용하는 메소드
                문자열.match(정규식) : 문자열에서 정규식 패턴의 값과 일치하는 값을 리턴한다.
                ** 문자열.replace(정규식, 바꿀값) : 문자열에서 정규식 패턴의 값과 일치하는 부분을 바꿀값으로 변경한다.
                문자열.search(정규식) : 문자열에서 정규식 패턴의 값과 일치하는 부분의 시작 인덱스를 리턴한다.
                문자열.split(정규식) : 문자열에서 정규식 패턴의 값과 일치하는 값을 구분자로 하여 배열을 생성하여 리턴한다.
        */

        area.innerHTML = '<h3>정규 표현식 객체 생성</h3>';
        // RegExp 객체에서 제공하는 메소드 사용
        area.innerHTML += `regExp1.test(str1) : ${regExp1.test(str1)}<br>`;
        area.innerHTML += `regExp1.test(str2) : ${regExp1.test(str2)}<br>`;
        area.innerHTML += `------------------------<br>`;
        area.innerHTML += `regExp1.exec(str1) : ${regExp1.exec(str1)}<br>`;
        area.innerHTML += `regExp1.exec(str2) : ${regExp1.exec(str2)}<br>`;
        area.innerHTML += `------------------------<br><br>`;

        // String 객체에서 정규 표현식 객체를 이용하는 메소드
        area.innerHTML += `str1.match(regExp1) : ${str1.match(regExp1)}<br>`;
        area.innerHTML += `str2.match(regExp1) : ${str2.match(regExp1)}<br>`;
        area.innerHTML += `------------------------<br>`;
        area.innerHTML += `str1.replace(regExp1, '스크립트') : ${str1.replace(regExp1, '스크립트')}<br>`;
        area.innerHTML += `str1.search(regExp1) : ${str1.search(regExp1)}<br>`;
        area.innerHTML += `str1.split(regExp1) : ${str1.split(regExp1)}<br>`;

        console.log(str1.split(regExp1));
    });

플래그 문자
    <p>
        플래그 문자는 정규 표현식의 검색 방식을 설정하기 위해 사용한다.<br>
        순서와 상관없이 하나 이상의 플래그를 동시에 설정할 수 있다. 
    </p>
    <ul>
        <li>i : 대소문자를 가리지 않고 비교한다.</li>
        <li>g : 전역으로 비교를 수행한다.</li>
        <li>m : 여러 줄의 비교를 수행한다.</li>
    </ul>

    <button id="btn2">실행 확인</button>
    <div id="area2" class="area"></div>
    
    // 플래그 문자
    let btn2 = document.getElementById('btn2');

    btn2.addEventListener('click', () => {
        let area = document.getElementById('area2');
        let str = "JAvaScript jQuery Ajax";

        area.innerHTML = '<h3>플래그 문자</h3>';
        // replace() 메소드에서 '$&'는 패턴을 만족하는 문자열을 가리킨다.
        area.innerHTML += `/a/ :  ${str.replace(/a/, '($&)')} <br>`;
        area.innerHTML += `/a/i :  ${str.replace(/a/i, '($&)')} <br>`;
        area.innerHTML += `/a/g :  ${str.replace(/a/g, '($&)')} <br>`;
        area.innerHTML += `/a/ig :  ${str.replace(/a/ig, '($&)')} <br>`;
        area.innerHTML += `/a/gi :  ${str.replace(/a/gi, '($&)')} <br>`;

    });

메타 문자
    <p>
        특정 메타 문자를 통해 정규식으로 특정 패턴을 제시할 수 있다.
    </p>

    <button id="btn3">실행 확인</button>
    <div id="area3" class="area"></div>
    
    // 메타 문자
    let btn3 = document.getElementById('btn3');

    btn3.addEventListener('click', () => {
        let area = document.getElementById('area3');
        let str = "a aa aaa aaaa";

        area.innerHTML = '<h3>메타 문자</h3>';
        /*
            반복 검색
            {m,n}은 앞선 패턴이 최소 m번 최대 n번 반복되는 문자열을 의미한다.
            +는 앞선 패턴이 최소 한 번 이상 반복되는 문자열을 의미한다.
            ?는 앞선 패턴이 최대 한 번 이상 반복되는 문자열을 의미한다.
        */
        area.innerHTML += '<h4>반복 검색</h4>';
        area.innerHTML += `/a{1,2}/g : ${str.replace(/a{1,2}/g, '($&)')} <br>`;
        // {3,3}
        area.innerHTML += `/a{3}/g : ${str.replace(/a{3}/g, '($&)')} <br>`;
        // 앞선 패턴이 최소 2번 이상 반복되는 문자열을 의미한다.
        area.innerHTML += `/a{2,}/g : ${str.replace(/a{2,}/g, '($&)')} <br>`;
        // {1,}
        area.innerHTML += `/a+/g : ${str.replace(/a+/g, '($&)')} <br>`;
        // {0,1}
        area.innerHTML += `/a?/g : ${str.replace(/a?/g, '($&)')} <br>`;


        str ='Javascript\nJquery\nShellscript\nAjax';
        /*
            문자열의 앞, 뒤 구분
            ^는 문자열의 시작을 의미한다.
            $는 문자열의 마지막을 의미한다.
        */
        area.innerHTML += '<h4>문자열의 앞, 뒤 구분</h4>';
        area.innerHTML += `/^j/ig : ${str.replace(/^j/ig, '($&)')} <br>`; // 개행된 문자열은 찾지 못한다.
        area.innerHTML += `/^j/igm : ${str.replace(/^j/igm, '($&)')} <br>`;
        area.innerHTML += `/ipt$/igm : ${str.replace(/ipt$/igm, '($&)')} <br>`;

        str ='123 Javascript Jquery Ajax';
        /*
            OR 검색
            [...] 내의 문자들 중 하나라도 존재할 경우를 의미한다.
        */
        area.innerHTML += '<h4>OR 검색</h4>';
        area.innerHTML += `/[aj]/ig : ${str.replace(/[aj]/ig, '($&)')} <br>`;
        // [...] 내의 ^는 not의 의미를 가진다.
        area.innerHTML += `/[^a]/ig : ${str.replace(/[^a]/ig, '($&)')} <br>`;
        // [...] 내의 -는 범위 지정을 의미한다.
        area.innerHTML += `/[a-z]/ig : ${str.replace(/[a-z]/ig, '($&)')} <br>`;
        area.innerHTML += `/[a-z]/g : ${str.replace(/[a-z]/g, '($&)')} <br>`;
        area.innerHTML += `/[A-Z]/g : ${str.replace(/[A-Z]/g, '($&)')} <br>`;
        area.innerHTML += `/[0-9]/g : ${str.replace(/[0-9]/g, '($&)')} <br>`;

        /*
            임의의 문자열 검색
            .은 임의의 문자 한 개를 의미하고, 문자 내용은 무엇이든 상관없다.
        */
        area.innerHTML += '<h4>임의의 문자열 검색 검색</h4>';
        area.innerHTML += `/..../g : ${str.replace(/..../g, '($&)')} <br>`;


        /*
            \d : 숫자를 의미한다.
            \D : 숫자가 아닌 문자를 의미한다.
            \w : 알파벳, 숫자, 언더 스코어(_)를 의미한다.
            \W : 알파벳, 숫자, 언더 스코어(_)가 아닌 문자를 의미한다.
            \s : 공백 문자를 의미한다. (띄어쓰기, 탭, 줄바꿈)
            \S : 공백 문자가 아닌 문자를 의미한다.
        */
        str = 'A1 B2 C3 d_4 e:5 ` ffgg77--__--\t가\n나\n다';
        area.innerHTML += '<h3>추가 메타 문자</h3>';
        // /[0-9]/g 와 결과가 같다.
        area.innerHTML += `/\\d/g : ${str.replace(/\d/g, '($&)')} <br>`;
        // /[^0-9]/g 와 결과가 같다.
        area.innerHTML += `/\\D/g : ${str.replace(/\D/g, '($&)')} <br>`;
        // /[a-zA-Z0-9_]/g 와 결과가 같다.
        area.innerHTML += `/\\w/g : ${str.replace(/\w/g, '($&)')} <br>`;
        // /[^a-zA-Z0-9_]/g 와 결과가 같다.
        area.innerHTML += `/\\W/g : ${str.replace(/\W/g, '($&)')} <br>`;
        // /[ \n\t]/g 와 결과가 같다.
        area.innerHTML += `/\\s/g : ${str.replace(/\s/g, '($&)')} <br>`;
        // /[^ \n\t]/g 와 결과가 같다.
        area.innerHTML += `/\\S/g : ${str.replace(/\S/g, '($&)')} <br>`;
    });



0개의 댓글