Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 정규식에서 일치하는 그룹에 접근하는 방법

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()와 마찬가지로 캡처 그룹 정보를 포함한 배열을 반환하므로, 상황에 맞게 편리한 방법을 선택하면 됩니다.