>웹 프론트엔드 >JS 튜토리얼 >JavaScript 정규식에서 일치하는 그룹에 올바르게 액세스하는 방법은 무엇입니까?

JavaScript 정규식에서 일치하는 그룹에 올바르게 액세스하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 13:08:14131검색

How to Correctly Access Matched Groups in JavaScript Regular Expressions?

JavaScript 정규식에서 일치하는 그룹에 액세스하는 방법

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.