JavaScript의 정규식으로 캡처된 하위 그룹에 액세스하려면 exec() 메서드를 사용하면 됩니다. 이 메소드는 표현식으로 일치하는 항목을 포함하는 배열과 유사한 객체를 반환합니다.
설명하기 위해 다음 예를 고려하십시오.
var myString = "something format_abc"; // Obtain "abc" const arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString); console.log(arr); // Outputs: [" format_abc", "abc"] console.log(arr[1]); // Outputs: undefined (the issue) console.log(arr[0]); // Outputs: format_undefined (another issue)
예상되는 출력은 하위 그룹 "abc"를 얻는 것입니다. arr 배열의 두 번째 요소로 사용됩니다. 그러나 arr[1] 및 arr[0]에 액세스하면 각각 정의되지 않은 값과 잘못된 값이 발생합니다.
정의되지 않은 출력 해결:
arr[1]은 .*? 정규식에 사용되는 탐욕 없는 수량자입니다. 이 수량자는 가능한 최소 문자 수를 캡처하여 구분 기호 없이 문자열 "format_abc"를 생성합니다.
이 문제를 해결하려면 대신 욕심 많은 수량자 .*를 사용하세요.
/(?:^|\s)format_(.*)(?:\s|$)/
잘못된 문자열 출력 수정:
arr[0] 문제 콘솔의 printf와 유사한 형식을 사용하여 발생합니다. format_%A의 특수 문자 %가 누락된 다음 매개변수의 값을 대체하려고 시도했습니다.
이 문제를 해결하려면 정규 표현식에서 %를 이스케이프 처리하세요.
/(?:^|\s)format_(.*?)(?:\s|$)/
이러한 수정을 통해 올바른 출력이 달성됩니다.
[" format_abc", "abc"] console.log(arr[1]); // Outputs: "abc" console.log(arr[0]); // Outputs: " format_abc"
matchAll()을 통해 일치하는 그룹에 액세스(ECMAScript 2020 이상):
String.prototype.matchAll() 메서드는 문자열에서 여러 일치 항목을 반복하는 현대적이고 보다 직관적인 접근 방식을 제공합니다. 다음과 같이 사용할 수 있는 반복자를 반환합니다.
const string = "something format_abc"; const regexp = /(?:^|\s)format_(.*?)(?:\s|$)/g; const matches = string.matchAll(regexp); for (const match of matches) { console.log(match); console.log(match.index); }
위 내용은 JavaScript 정규식에서 일치하는 그룹에 올바르게 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!