JavaScript 정규식의 비캡처링 괄호
괄호 ( )는 두 가지 기능을 수행합니다 -
문자 그룹화와 캡처(그룹) 기능입니다.
그런데 그룹화는 필요하지만 캡처는 하고 싶지 않다면 어떻게 해야 할까요?
이런 문제를 해결하기 위해 특별한
비캡처링 괄호 (?: )가
고안되었습니다 - 이 괄호는 그룹화는 하지만 캡처하지는 않습니다.
예시
다음 예시에서 첫 번째 괄호는 그룹화를 위해, 두 번째 괄호는 캡처를 위해 필요합니다. 그러나 두 괄호 모두 데이터를 캡처합니다:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
결과적으로 우리의 캡처 그룹에는 다음과 같은 데이터가 담기게 됩니다:
console.log(res[0]); // 'abab123' 출력
console.log(res[1]); // 'ab' 출력
console.log(res[2]); // '123' 출력
예시
이제 첫 번째 괄호 쌍이 그룹화만 하고 캡처는 하지 않도록 만들어 봅시다:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
결과적으로 첫 번째 캡처 그룹에는 우리의 숫자가 담기게 됩니다:
console.log(res[1]); // '123' 출력