오늘도 개발자 Backend Developer

Javascript replaceAll 사용하기

  • 자바스크립트에서는 replaceAll이 없다. 그래서 다른 방법으로 사용해야한다.

1. 기존 replace

var str = "TEST : Sample TEST text";
var replaceStr = str.replace("TEST","Test"); // TEST라는 텍스트를 Test으로 변경
console.log("replaceStr : ", replaceStr);
  • 결과값
    • 첫번째 조건만 변경하고 멈춘다.

replaceStr : Test : Sample TEST text

2. replaceAll 사용하기

string prototype 메소드 추가해서 사용하기

  • searchStr을 구분자로 분리(split)한 다음, replacement라는 연결자로 연결(join)하는 형태
/**
 * String prototype replaceAll 추가
 *  - searchStr을 구분자로 분리(split)한 다음, replacement라는 연결자로 연결(join)하는 형태
 *
 * @param searchStr : 바꾸려는 String
 * @param replacement : 바꾸어질 String
 */
String.prototype.replaceAll = function(searchStr, replacement) {
    return this.split(searchStr).join(replacement);
}

var protoTypeTestStr = "TEST : Sample TEST text";
var protoTypeTestRtnStr = protoTypeTestStr.replaceAll("TEST", "Test");
console.log("protoTypeTestRtnStr : ", protoTypeTestRtnStr);
  • 결과값

protoTypeTestRtnStr : Test : Sample Test text

정규식을 활용

  • 변경하려는 값과 같은 것만(g 값을 사용)
var regexTestStr = "TEST : Sample TEST text";
var regexTestRtnStr = regexTestStr.replace(new RegExp("TEST", "g"), "Test");
console.log("regexTestRtnStr : ", regexTestRtnStr);
  • 대소문자 구분 없이 처리(gi 값 사용)
var regexTestTipStr = "test : Sample test text";
var regexTestTipRtnStr = regexTestTipStr.replace(new RegExp("TEST", "gi"), "Test");
console.log("regexTestTipRtnStr : ", regexTestTipRtnStr);

3. 실제 사용하는 방법

String prototype으로 추가

/**
 * String prototype replaceAll 추가
 *  - 정규식으로 replaceAll 구현
 *  - ignoreCase가 true이면 대소문자 구분없이 변경한다.
 *
 * @param searchStr : 바꾸려는 String
 * @param replacement : 바꾸어질 String
 * @param ignoreCase(boolean) : 대소문자 구분여부
 */
String.prototype.rexReplaceAll = function(searchStr, replacement, ignoreCase) {
    return this.replace(new RegExp(searchStr, ignoreCase ? "gi" : "g"), replacement);
}

실행

  • 소스
var regexProtoTestStr = "test : Sample test text";
var regexProtoTestRtnStr = regexProtoTestStr.rexReplaceAll("TEST", "Test", true);
console.log("regexProtoTestRtnStr : ", regexProtoTestRtnStr);
  • 결과

regexProtoTestRtnStr : Test : Sample Test text

4. 전체소스

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>JAVASCRIPT replaceAll 구현하기</title>
</head>
<body>
    <script>
        /* 자바스크립트 기본 replace 테스트 */
        var oriReplaceTestStr = "TEST : Sample TEST text";
        var oriReplaceRtnStr = oriReplaceTestStr.replace("TEST","Test"); // TEST라는 텍스트를 Test으로 변경
        console.log("oriReplaceRtnStr : ", oriReplaceRtnStr);

        /**
         * String prototype replaceAll 추가
         *  - searchStr을 구분자로 분리(split)한 다음, replacement라는 연결자로 연결(join)하는 형태
         *
         * @param searchStr : 바꾸려는 String
         * @param replacement : 바꾸어질 String
         */
        String.prototype.replaceAll = function(searchStr, replacement) {
            return this.split(searchStr).join(replacement);
        }

        var protoTypeTestStr = "TEST : Sample TEST text";
        var protoTypeTestRtnStr = protoTypeTestStr.replaceAll("TEST", "Test");
        console.log("protoTypeTestRtnStr : ", protoTypeTestRtnStr);

        var regexTestStr = "TEST : Sample TEST text";
        var regexTestRtnStr = regexTestStr.replace(new RegExp("TEST", "g"), "Test");
        console.log("regexTestRtnStr : ", regexTestRtnStr);

        /** TIP : 대소문자 구분없이 처리 **/
        var regexTestTipStr = "test : Sample test text";
        var regexTestTipRtnStr = regexTestTipStr.replace(new RegExp("TEST", "gi"), "Test");
        console.log("regexTestTipRtnStr : ", regexTestTipRtnStr);

        /**
         * String prototype replaceAll 추가
         *  - 정규식으로 replaceAll 구현
         *  - ignoreCase가 true이면 대소문자 구분없이 변경한다.
         *
         * @param searchStr : 바꾸려는 String
         * @param replacement : 바꾸어질 String
         * @param ignoreCase(boolean) : 대소문자 구분여부
         */
        String.prototype.rexReplaceAll = function(searchStr, replacement, ignoreCase) {
            return this.replace(new RegExp(searchStr, ignoreCase ? "gi" : "g"), replacement);
        }

        var regexProtoTestStr = "test : Sample test text";
        var regexProtoTestRtnStr = regexProtoTestStr.rexReplaceAll("TEST", "Test", true);
        console.log("regexProtoTestRtnStr : ", regexProtoTestRtnStr);
    </script>
</body>
</html>

5. TIP

  • 정규식 추가
    • m을 추가하면 여러줄에 대해서도 처리가 가능하다.