(?:...)는 값을 저장하지 않고 범위만 묶어
비캡처 그룹은 수량자와 선택의 범위를 정하는 일은 평범한 괄호와 똑같이 해. 다만 매칭한 텍스트를 번호 그룹에 담지 않아서 뒤쪽 그룹 번호를 차지하지 않아.
값이 필요 없을 때 비캡처 그룹을 쓰는 이유
- 의도가 바로 보여.
(?:...)를 보면 이 괄호는 추출이 아니라 그룹화용이라는 걸 알 수 있어. - 그룹 번호가 덜 흔들려. 비캡처 그룹을 중간에 추가하거나 지워도 기존 캡처 그룹의 번호는 바뀌지 않아.
- 불필요한 저장을 피할 수 있어. 성능 차이는 보통 작지만, 쓰지 않을 캡처를 만들 이유도 없지.
모든 괄호를 캡처 그룹으로 만들지는 마
나중에 실제로 꺼내 쓰거나 역참조할 값만 캡처해. 범위만 묶는 괄호까지 전부 캡처하면 결과 객체가 시끄러워지고, 패턴을 고칠 때 번호 참조도 함께 깨지기 쉬워져.