>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 `match()` 메소드가 겹치지 않는 정규식 일치 항목만 찾는 이유는 무엇입니까?

JavaScript의 `match()` 메소드가 겹치지 않는 정규식 일치 항목만 찾는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-19 17:50:13903검색

Why Does JavaScript's `match()` Method Only Find Non-Overlapping Regular Expression Matches?

정규 표현식의 중복 일치

정규 표현식에서 g(전역) 플래그가 있는 일치 방법은 일반적으로 중복되지 않는 하위 문자열만 일치하고 캡처합니다. 다음 예를 고려하십시오.

const text = "12345";
const regex = /\d{3}/g;
const matches = text.match(regex);

이 경우 "123", "234" 및 "345"의 세 가지 일치 항목을 얻을 것으로 예상됩니다. 그러나 일치 방법을 사용하면 "123"만 얻습니다.

왜 하나만 일치합니까?

일치 방법은 일치하는 하위 문자열을 사용하고 해당 인덱스를 앞당깁니다. "123"을 캡처한 후 이제 인덱스는 세 번째 문자를 지나서 잠재적인 일치 항목으로 "45"만 남습니다. 이 나머지 부분은 d{3} 패턴을 충족하지 않으므로 더 이상 일치하는 항목을 찾을 수 없습니다.

겹치는 일치 항목 처리

겹치는 일치 항목을 캡처하려면 일부 항목에서 사용되는 다른 기술을 사용해야 합니다. .Net, Python, PHP 및 Ruby와 같은 정규식 버전. 이 기술에는 너비가 0인 어설션(캡처링 그룹을 사용한 긍정적 예측)을 사용하여 입력 문자열 내의 모든 위치를 테스트하는 작업이 포함됩니다. RegExp.lastIndex 속성은 무한 루프 없이 문자열을 계속 진행하기 위해 수동으로 증가됩니다.

예를 들어 matchAll 메서드를 사용하면

const re = /(?=(\d{3}))/g;
const matches = Array.from('12345'.matchAll(re));
console.log(matches.map(match => match[1])); // ["123", "234", "345"]

이 접근 방식은 원하는 대로 세 개의 겹치는 일치 항목을 모두 캡처합니다. 이 기술은 특정 정규식 버전에서만 지원된다는 점을 기억하세요.

위 내용은 JavaScript의 `match()` 메소드가 겹치지 않는 정규식 일치 항목만 찾는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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