JavaScript 정규식(Regular Expression)에서 일치하는 캡처 그룹에 접근하려면 exec() 메서드를 사용할 수 있습니다. exec()는 일치 결과를 배열 형태로 반환하며, 인덱스 0에는 전체 일치 문자열이, 인덱스 1부터는 각 캡처 그룹의 값이 순서대로 저장됩니다.
예제
다음 코드는 문자열에서 akdg_ 뒤에 오는 사용자 이름 부분만 캡처 그룹으로 추출하는 예제입니다.
<html> <head> <script> var str = "Username akdg_amit"; var myReg = /(?:^|\s)akdg_(.*?)(?:\s|$)/g; var res = myReg.exec(str); document.write(res[1]); </script> </head> <body> </body> </html>
코드 설명
위 예제에서 사용된 정규식 패턴을 살펴보면 다음과 같습니다.
(?:^|\s)— 문자열 시작 또는 공백 문자를 의미하며,?:를 사용했기 때문에 캡처되지 않는 비캡처 그룹입니다.akdg_— 리터럴 문자열akdg_와 일치합니다.(.*?)— 이 부분이 실제로 캡처되는 그룹으로, 공백이나 문자열 끝을 만나기 전까지의 모든 문자를 최소한으로 매칭합니다.(?:\s|$)— 공백 또는 문자열의 끝을 의미하는 비캡처 그룹입니다.
따라서 res[0]은 전체 일치 결과인 " akdg_amit"가 되고, res[1]은 첫 번째 캡처 그룹의 값인 amit가 됩니다. 실행 결과 화면에는 amit이 출력됩니다.
참고: match() 메서드 활용
exec() 대신 문자열의 match() 메서드를 사용해도 동일한 결과를 얻을 수 있습니다.
var str = "Username akdg_amit"; var res = str.match(/(?:^|\s)akdg_(.*?)(?:\s|$)/); console.log(res[1]); // amit
전역 플래그(g) 없이 match()를 호출하면 exec()와 마찬가지로 캡처 그룹 정보를 포함한 배열을 반환하므로, 상황에 맞게 편리한 방법을 선택하면 됩니다.