정규식은 문자열에서 특정 패턴을 찾거나 검색하기 위해 사용되는 표현식입니다. 문자열을 다루는데 매우 강력한 도구로, 특정 패턴을 일치시키기 위한 규칙을 정의하는 데 사용됩니다. JavaScript에서는 정규식을 표현하기 위해 /패턴/플래그
형태의 리터럴 표기법을 사용합니다.
예를 들어, /(\d+)([SDT])([*#]?)/g
는 세 부분으로 나뉘어지며, (\d+)
, ([SDT])
, ([*#]?)
은 각각 서로 다른 패턴을 나타냅니다.
(\d+)
: 한 개 이상의 숫자를 의미하는 패턴. ()
는 그룹을 나타내며, \d+
는 숫자가 하나 이상 반복되는 패턴을 의미합니다.([SDT])
: S, D, T 문자 중 하나를 의미하는 패턴. [SDT]
는 S, D, T 중 하나의 문자가 나타나는 패턴을 의미합니다.([*#]?)
: 또는 # 문자가 0 또는 1번 나타나는 패턴. `[#]?`는 * 또는 # 문자가 0 또는 1번 나타나는 패턴을 의미합니다.matchAll()
메서드는 정규식에 따라 문자열에서 일치하는 모든 결과를 반복 가능한(iterable) 객체로 반환합니다. 각 일치 결과는 이터레이터(iterator)를 통해 접근할 수 있습니다. 이터레이터를 통해 반환된 각 결과는 그룹화된 일치 항목을 포함하며, match
객체 형태로 제공됩니다.
이제 주어진 코드에 대해 설명드리겠습니다.
const regex = /(\d+)([SDT])([*#]?)/g;
const matches = [...dartResult.matchAll(regex)];
return matches.map(match => ({
score: parseInt(match[1]),
bonus: match[2],
option: match[3]
}));
이 코드는 입력 문자열인 dartResult
를 정규식 regex
를 사용하여 토큰화하여 각각의 기회에 대한 점수, 보너스, 옵션을 추출합니다. 코드의 각 부분은 다음과 같은 역할을 수행합니다:
regex
: 위에서 설명한 정규식 패턴을 나타냅니다.matches
: dartResult
에서 정규식 regex
에 따라 일치하는 모든 결과를 배열로 저장합니다.matches.map(...)
: 각 일치 항목을 순회하며, 일치 결과를 파싱하여 점수, 보너스, 옵션 정보를 객체 형태로 변환하여 반환합니다.이렇게 함으로써 입력 문자열을 토큰화하고, 각각의 토큰에 대한 점수, 보너스, 옵션 정보를 추출하게 됩니다.