티스토리 뷰

기본 문법

 

 

str 문자열의 pattern 부분을 replacement로 교체한 새로운 문자열을 리턴한다. (기존 str 문자열을 변경시키지 않음)

 

pattern인자로 문자열이 들어온 경우는 제일 처음 매치하는 패턴 1개만 교체됨.

flag가 g (global)인 RegExp가 들어온 경우에는 매치하는 모든 패턴이 교체됨.

 

 

 

 

문제

 

LeetCode 394번 Decode String 문제를 풀면서 replace 함수 사용법을 알아보자.

 

The encoding rule is: k[encoded_string]k [encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times.

 

입력 내부의 모든 k [encoded_string] 형태를 encoded_string이 K번 반복되는 형태의 문자열로 풀어라. 

재귀적으로 다 풀어야 함.

 

 

 

 

replace 함수 예제

 

let str = "3[a]2[b]";
let newStr = str.replace(/(?<num>\d+)\[(?<str>\w+)\]/g, (match, p1, p2, offset, string, groups) => {

            console.log("\n====");
            console.log("match", match);
            console.log("p1",p1,"p2",p2);
            console.log("offset",offset);
            console.log("string",string);
            console.log("groups",groups);                   //captures named group. undefined if not matched.

            return p2.repeat(p1);});

console.log("\noriginal",str, " new_string", newStr);

 

(1) RegExp

( ) 괄호로 감싸면 그룹이다. 그룹에 이름 주고 싶으면 (? <그룹명> 표현식 ) 형태로 쓰면 된다.

 

위 예제에서의 정규표현식은 가장 안쪽 패턴에 매칭 된다.

예를 들면 이렇게!

/w는 [a-zA-Z0-9_]와 동일하므로 "[" 나 "]"는 포함하지 않기 때문.

 

 

(2) function

replace함수 2번째 인자 function의 파라미터들
위의 예제 실행 결과

groups의 경우는 이름 붙은 그룹만 포함한다. 그런 게 없을 경우 undefined.

 

 

 

 

 

정규표현식과 replace함수를 이용한 문제 해결 코드

 

let decodeString = function(s) {
    let re = /(\d+)\[(\w+)\]/g;
    
    while(re.test(s)){
        s = s.replace(re, (_, num, str) => str.repeat(num));
    }
    
    return s;
};

 

 

 

 

 

문제 링크 : https://leetcode.com/problems/decode-string/

 

출처 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

'시리즈 > Javascript' 카테고리의 다른 글

정규표현식 예제  (0) 2021.02.20
Map and Set  (0) 2021.02.20
javascript 팁  (0) 2021.01.21
javascript 콘솔 입출력  (0) 2021.01.21
[queue] javascript 효율적인 큐  (0) 2021.01.13
댓글
공지사항
최근에 올라온 글