match 메서드
match
메서드는 배열을 반환한다.
<Example>
let string = "a1b2c3d4";
string = string.match(/[a-z]+\d/gi);
output
["a1", "b2", "c3", "d4"]
첫번째 Example1 을 나눠보기로 도전하였다.
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
)로 찾고있다. 결국 숫자[알파벳] 을 찾고있는 것이지 숫자[알파벳 + 숫자[알파벳]]을 찾고있는것이 아니다 따라서 괄호 안의 숫자[알파벳]을 먼저 해결한 후 그밖의 괄호를 처리하게된다.