>웹 프론트엔드 >JS 튜토리얼 >정규식을 사용하여 문자열에서 겹치는 일치 항목을 어떻게 찾을 수 있습니까?

정규식을 사용하여 문자열에서 겹치는 일치 항목을 어떻게 찾을 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 08:21:11293검색

How Can I Find Overlapping Matches in a String Using Regular Expressions?

Regex를 사용한 겹치는 문자열 일치 이해

특정 시나리오에서는 전역 플래그가 있는 string#match 메서드가 입력 문자열. 예를 들어 문자열 "12345"를 생각해 보세요. 정규식 /d{3}/g를 사용하면 ["123", "234", "345"]의 세 가지 일치 항목을 얻을 것으로 예상됩니다. 그러나 "123"이라는 단일 일치 항목만 얻습니다.

이는 string#match 메서드가 일치하는 문자를 소비(즉, 인덱스를 지나서 읽고 앞으로 이동)하기 때문입니다. 따라서 "123"을 일치시킨 후 현재 인덱스는 '4'를 가리키고 정규식 엔진이 중지되어 더 이상 일치하는 항목을 찾을 수 없습니다.

0 너비 어설션으로 겹치는 일치 항목 해결

이러한 제한을 해결하기 위해 널리 사용되는 기술은 캡처 그룹과 함께 긍정적인 예측 어설션을 사용하는 것입니다. 이 접근 방식은 실제로 하위 문자열을 사용하지 않고 하위 문자열의 존재를 확인합니다. 입력 문자열의 모든 위치를 반복적으로 테스트하여 원하는 중복 일치 항목을 캡처할 수 있습니다.

var re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]);

이 예에서는 연속된 3자리 숫자를 사용하지 않고 캡처하는 긍정적 예측 어설션이 포함된 정규식을 만듭니다. matchAll을 사용하여 입력 문자열을 반복함으로써 원하는 일치 항목 목록(["123", "234", "345"])을 얻습니다.

이 기술은 다양한 프로그래밍 언어에서 지원되므로 개발자가 이를 처리할 수 있습니다. 문자열 일치 시나리오를 쉽게 중첩할 수 있습니다.

위 내용은 정규식을 사용하여 문자열에서 겹치는 일치 항목을 어떻게 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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