JavaScript에서 문자열에 포함된 여러 개의 대괄호 값들을 꺼내야 할 때가 있습니다. 예를 들어 [John Smith][David Miller]처럼 대괄호로 감싸진 여러 값이 있을 때, 정규식(RegExp)을 활용하면 대괄호를 제외한 순수한 값만 손쉽게 추출할 수 있습니다.
핵심 원리: 룩어헤드와 룩비하인드
이 문제를 해결하는 핵심은 룩어헤드(Lookahead)와 룩비하인드(Lookbehind)입니다.
(?<=\[): 앞쪽이 여는 대괄호[인 위치만 매칭합니다.(?=\]): 뒤쪽이 닫는 대괄호]인 위치만 매칭합니다.
이 두 조건 사이의 모든 문자(.*?)를 전역 플래그(g)로 찾으면, 대괄호 자체는 결과에 포함되지 않은 채 값들만 배열로 반환됩니다.
예제 코드
var regularExpression = /(?<=\[).*?(?=\])/g;
var getTheValueWithIndex = "[John Smith][David Miller]".match(regularExpression);
console.log("첫 번째 값 (대괄호 제외): " + getTheValueWithIndex[0]);
console.log("두 번째 값 (대괄호 제외): " + getTheValueWithIndex[1]);match() 메서드는 일치하는 결과를 배열 형태로 반환하므로, 인덱스 0, 1 … N을 사용해 각각의 값에 접근할 수 있습니다.
프로그램 실행 방법
위 코드를 파일로 저장한 후 Node.js로 실행합니다. 여기서는 파일 이름을 demo132.js로 저장했다고 가정합니다.
node demo132.js
실행 결과
PS C:\Users\Amit\JavaScript-code> node demo132.js 첫 번째 값 (대괄호 제외): John Smith 두 번째 값 (대괄호 제외): David Miller
정리
룩비하인드 (?<=\[)와 룩어헤드 (?=\])를 조합한 정규식을 사용하면 대괄호 기호 없이 내부 값만 깔끔하게 추출할 수 있습니다. match()가 반환하는 배열의 인덱스를 활용하면 대괄호로 감싸진 값이 몇 개든 모두 처리할 수 있습니다. 단, 룩비하인드는 ES2018부터 지원되므로 구형 브라우저 환경이라면 호환성을 확인하는 것이 좋습니다.