LHJ

I'm a FE developer.

17.10 반복

25 May 2020 » js_lj

17.10 반복

반복(repetition) 메타 문자는 얼마나 많이 일치해야 하는지 지정할 때 씁니다.

역주_
수량자라는 표현을 사용한 책이 많습니다.

앞에서 우리는 숫자 한 개를 찾는 예제를 봤었습니다.
그런데 숫자 여러 개를 찾아야 한다면 어떨까요?
이미 알고 있는 방법을 사용해서 다음과 같이 찾을 수 있습니다.

const beer99 = "99 bottles of beer on the wall " + "take 1 down and pass it around -- " + "98 bottles of beer on the wall.";
const match = beer99.match(/[0-9][0-9][0-9]|[0-9][0-9]|[0-9]/);
// const match = beer99.match(/[0-9][0-9][0-9]|[0-9][0-9]|[0-9]/g);

이번에도, 두 자리 숫자가 숫자를 소비해서 세 자리 숫자를 찾지 못하는 일이 없도록 세 자리 숫자를 먼저 썼습니다.
이 정규식은 한 자리, 두 자리, 세 자리 숫자에는 잘 동작하지만 네 자리 숫자가 필요하다면 정규식을 또 고쳐야 합니다.
다행히 더 나은 방법이 있습니다.

const beer99 = "99 bottles of beer on the wall " + "take 1 down and pass it around -- " + "98 bottles of beer on the wall.";
const match = beer99.match(/[0-9]+/);
// const match = beer99.match(/[0-9]+/g);

문자셋 다음의 +그 앞에 있는 요소가 하나 이상 있어야 한다는 뜻입니다.
반복 메타 문자는 그 자체로는 아무 의미도 없습니다.
반복 메타 문자에는 다섯 가지 종류가 있습니다.

반복 메타 문자설명예제
{n}정확히 n개/\d{5}/는 새 우편번호처럼 정확히 다섯 자리 숫자에만 일치합니다.
{n, }최소한 n개/\d{5,}/는 다섯 자리 이상의 숫자에만 일치합니다.
{n, m}n개 이상, m개 이하/\d{2,5}/는 2개, 3개, 4개, 5개에 일치합니다.
?0개 또는 1개, {0,1}와 동등합니다./[a-z]\d?/i는 글자가 있고 그 다음에 숫자가 없거나 한 개 있는 경우에 일치합니다.
*숫자는 상관없으며 없어도 됩니다(클레이니(Klene) 스타, 클레이니 클로저라고 부르기도 합니다)./[a-z]\d*/i는 글자가 있고 그 다음에 숫자가 없거나 있는 경우에 일치합니다.
+하나 이상/[a-z]\d+/i는 글자가 있고 그 다음에 숫자가 한 개 이상있는 경우에 일치합니다.