정규 표현식에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!