Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 정규식에서 캡처 그룹 패턴을 재사용하는 방법

정규식에서 한 번 매칭한 패턴을 다시 사용해야 하는 경우가 있습니다. 예를 들어 "10 10 10"처럼 동일한 숫자가 공백으로 구분되어 반복되는 문자열을 검사하고 싶다면, 캡처 그룹(capture group)역참조(backreference)를 함께 사용하면 됩니다.

핵심은 괄호 ()로 감싼 패턴을 캡처한 뒤, \1과 \2 같은 역참조로 해당 패턴을 다시 불러오는 것입니다. 아래 예제를 통해 자세히 살펴보겠습니다.

예제 코드

var groupValues1 = "10 10 10";
var groupValues2 = "10 10 10 10";
var groupValues3 = "10 10";

// (\d+) : 숫자를 첫 번째 그룹으로 캡처
// (\s)  : 공백을 두 번째 그룹으로 캡처
// \1    : 첫 번째 그룹(숫자) 재사용
// \2    : 두 번째 그룹(공백) 재사용
var regularExpression = /^(\d+)(\s)\1\2\1$/;

var isValidGroup1 = regularExpression.test(groupValues1);
var isValidGroup2 = regularExpression.test(groupValues2);
var isValidGroup3 = regularExpression.test(groupValues3);

if(isValidGroup1 == true)
    console.log("This is a valid group=" + groupValues1);
else
    console.log("This is not a valid group=" + groupValues1);

if(isValidGroup2 == true)
    console.log("This is a valid group=" + groupValues2);
else
    console.log("This is not a valid group=" + groupValues2);

if(isValidGroup3 == true)
    console.log("This is a valid group=" + groupValues3);
else
    console.log("This is not a valid group=" + groupValues3);

패턴 분석

위 정규식 /^(\d+)(\s)\1\2\1$/의 구조는 다음과 같습니다.

  • (\d+) — 하나 이상의 숫자를 첫 번째 캡처 그룹으로 저장합니다.
  • (\s) — 공백 문자 하나를 두 번째 캡처 그룹으로 저장합니다.
  • \1, \2 — 앞서 캡처한 값과 완전히 동일한 내용이 반복되어야만 매칭됩니다.

따라서 이 패턴은 "숫자 공백 숫자 공백 숫자" 형태이면서, 세 개의 숫자가 모두 같은 값일 때만 참이 됩니다.

실행 방법

Node.js 환경에서 위 프로그램을 실행하려면 터미널에서 다음 명령어를 입력합니다.

node fileName.js

여기서는 파일 이름이 demo188.js라고 가정합니다.

출력 결과

세 개의 문자열 중 오직 "10 10 10"만 조건에 부합하며, 나머지는 매칭에 실패합니다. 실행 결과는 다음과 같습니다.

PS C:\Users\Amit\javascript-code> node demo188.js
This is a valid group=10 10 10
This is not a valid group=10 10 10 10
This is not a valid group=10 10

결과를 보면 "10 10 10 10"은 숫자가 네 개라 패턴 길이가 맞지 않고, "10 10"은 숫자가 두 개뿐이라 역참조 조건을 충족하지 못해 유효하지 않은 그룹으로 판별된 것을 확인할 수 있습니다.