핵심 차이점
test()는 문자열이 정규 표현식과 일치하는지 검사하여 true 또는 false를 반환합니다. 반면 exec()는 정규 표현식을 입력 문자열에 적용한 뒤, 캡처 그룹을 포함한 매칭 결과 전체를 배열 형태로 반환합니다.
입력 문자열이 특정 패턴과 일치하는지 단순히 확인만 하면 된다면 RegExp.test()가 가장 적합합니다. 불리언 값을 반환하기 때문에 if문 같은 조건문에서 활용하기에 이상적입니다.
반면 RegExp.exec()는 매칭된 전체 문자열, 각 캡처 그룹, 매칭 시작 인덱스 등의 상세 정보를 담아 반환하므로, 매칭 이후 캡처된 그룹이나 위치 정보를 가공해야 하는 경우에 유용합니다.
| 메소드 | 반환값 | 주요 용도 |
|---|---|---|
test() | true / false | 패턴 일치 여부 확인 |
exec() | 배열(캡처 그룹·인덱스 포함) 또는 null | 캡처 그룹 및 매칭 정보 추출 |
예제 코드
console.log(/^([a-z]+) ([A-Z]+)$/.exec("hello WORLD"))
console.log(/^([a-z]+) ([A-Z]+)$/.test("hello WORLD"))
실행 결과
[ 'hello WORLD', 'hello', 'WORLD', index: 0, input: 'hello WORLD', groups: undefined ] true
결과 해석
주목할 점은 exec()가 반환하는 배열의 첫 번째 요소가 매칭된 전체 문자열이라는 것입니다. 그다음 요소부터는 정규 표현식 내 괄호 ()로 지정된 개별 캡처 그룹들이 순서대로 저장됩니다. 위 예제에서는 소문자 그룹 'hello'와 대문자 그룹 'WORLD'가 각각 캡처되었습니다.
참고로 매칭되는 부분이 없을 때는 test()가 false를, exec()가 null을 반환합니다. 또한 g 플래그와 함께 exec()를 반복 호출하면 lastIndex가 이동하며 다음 매칭 결과를 순차적으로 얻을 수 있습니다.