LeetCode 394. Decode String



matchメソッドmatchメソッドは配列を返します.
<Example>
let string = "a1b2c3d4";

string = string.match(/[a-z]+\d/gi);

output
["a1", "b2", "c3", "d4"]
最初のExample 1の共有に挑戦します.
Input: s = "3[a]2[bc]"

s.replace(/\d+\[[a-z]+\]/gi,"바뀜");

output
"바뀜바뀜"
レッスンは3[a]から2[bc]から
完全な解答を見てみましょう.
const decodeString = (s) => {
    // 숫자가 포함되어 있으면 반복되는 while 로직
    while(s.match(/\d/gi)) { 
        s = s.replace(/\d+\[[a-z]+\]/gi, (value) => { //3[acc]
           const repeatNumber = Number(value.match(/\d+/gi)[0]);  // 2     3
           // [] 앞 숫자를 추출
           const internalStr = value.match(/[a-z]+/gi);           // c     acc
           // [] 안 알파벳 추출
           return internalStr[0].repeat(repeatNumber);            // cc    accaccacc
        });
    }
    return s;
};
Example2を混同して、重複しているのに、どうしてこのような正規表現が本当なのかという質問がたくさんありました.
よく見るとreplaceを探しています(/\d+[[a-z]+]/gi).その結果、数字[アルファベット+数字[アルファベット]ではなく、数字[アルファベット]を探しているので、括弧の中の数字[アルファベット]を先に解決してから、他の括弧を処理します.