>웹 프론트엔드 >JS 튜토리얼 >JavaScript Regex가 반복에서 마지막 그룹만 캡처하는 이유는 무엇입니까?

JavaScript Regex가 반복에서 마지막 그룹만 캡처하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-11 04:12:02309검색

Why Does JavaScript Regex Capture Only the Last Group in a Repetition?

JavaScript 정규식에서 여러 그룹 캡처

JavaScript에서 정규식으로 작업할 때 여러 그룹을 캡처해야 하는 상황에 직면하는 것이 일반적입니다. 데이터 그룹. 그러나 경우에 따라 일치하는 모든 그룹을 캡처하는 예상 동작이 달성되지 않을 수 있습니다.

예를 들어 다음 JavaScript 코드를 고려해 보세요.

"foo bar baz".match(/^(\s*\w+)+$/)

코드가 반환될 것으로 예상할 수 있습니다. 캡처된 일치 항목을 모두 포함하는 배열:

["foo bar baz", "foo", " bar", " baz"]

그러나 실제 결과는 다음과 같습니다.

["foo bar baz", " baz"]

이는 정규 표현식에서 캡처 그룹을 반복할 때 마지막 캡처가 유지됩니다. 이는 대부분의 정규 표현식에서 기본 동작입니다.

모든 일치 항목 캡처에 대한 해결 방법

일치하는 그룹을 모두 캡처해야 하는 경우 몇 가지 옵션을 사용할 수 있습니다. :

  • 구분 기호로 분할: 일치시키려는 패턴에 구분 기호가 포함되어 있는 경우 정규 표현식 대신 분할 방법을 사용하는 것이 좋습니다. 이 접근 방식을 사용하면 입력 문자열을 문자열 배열로 분할할 수 있습니다.
  • 루프를 사용한 일치: 루프를 사용하여 입력 문자열에 정규식을 반복적으로 적용할 수 있습니다. 실행 방법. 이 방법은 각 일치 항목에 대해 캡처된 모든 그룹을 포함하는 배열을 반환합니다.
  • 다중 수준 일치: 또 다른 접근 방식은 한 일치 항목에서 반복되는 그룹을 캡처한 다음 두 번째 정규식을 사용하여 이를 중단하는 것입니다. 서로 일치합니다.

Exec 루프를 사용하는 예

다음 예에서는 exec 루프를 사용하여 여러 그룹을 일치시키는 방법을 보여줍니다.

var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";

var r = /<(\w+(;\w+)*)>/g;

var match;
while ((match = r.exec(text)) != null) {
  console.log(match[1].split(";"));
}
// [ 'c', 'd', 'e', 'f' ]
// [ 'xx', 'yy', 'zz' ]

추가 리소스

  • regular-expressions.info/캡처 그룹 반복과 반복 그룹 캡처
  • Javascript 정규식에서 일치하는 그룹에 어떻게 액세스합니까?

위 내용은 JavaScript Regex가 반복에서 마지막 그룹만 캡처하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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