> 웹 프론트엔드 > JS 튜토리얼 > 정규식 및 글로벌 플래그와 중복되는 일치 항목을 얻으려면 어떻게 해야 합니까?

정규식 및 글로벌 플래그와 중복되는 일치 항목을 얻으려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-13 02:24:16
원래의
553명이 탐색했습니다.

How Can I Get Overlapping Matches with Regular Expressions and the Global Flag?

정규 표현식과 겹치는 문자열 일치

문자열 일치를 위해 전역 플래그(/g)와 함께 정규 표현식을 사용할 때 다음이 가능합니다. 겹치는 일치 항목이 예상대로 반환되지 않는 경우가 발생합니다. 예를 들어 문자열 "12345"에서 /d{3}/g를 사용하여 일치하면 ["123", "234", "345"] 대신 "123"만 일치합니다.

이유 이 동작은 전역 플래그와 정규식 일치의 특성에 있기 때문입니다. 정규식 엔진은 일치하는 하위 문자열을 읽고 사용하여 해당 인덱스를 일치 항목 바로 다음 위치로 이동합니다. 이 경우 "123"을 매칭한 후 인덱스는 4위로 이동하고 후속 매칭에서는 "45"만 남깁니다.

중복 매칭 기술

일치 항목이 겹치는 경우 여러 가지 접근 방식이 가능합니다. 채용됨:

  • Zero-Width Assertions:

    • 캡처 그룹과 함께 긍정적인 예측을 활용하여 입력 문자열의 모든 위치를 테스트합니다. .
    • 무한을 방지하려면 RegExp.lastIndex를 수동으로 진행하세요. 루프.
    • .NET, Python, PHP, Ruby 및 Java에서 지원됩니다(matchAll 사용).

예(JavaScript에서는 matchAll 사용) :

const re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));
로그인 후 복사

이 코드는 긍정적인 예측을 사용하여 테스트합니다. 세 개의 연속 숫자와 일치하는 문자열의 모든 위치에 대해. 결과는 ["123", "234", "345"]를 포함하여 일치하는 하위 문자열의 배열입니다.

추가 고려 사항:

  • 0 -width 어설션은 겹치는 하위 문자열을 일치시켜야 하는 경우에만 적용 가능합니다.
  • 일부 정규식 엔진에는 중첩 일치에 대한 지원이 내장되어 있습니다(예: PHP 및 Ruby의 PCRE).
  • 대체 접근 방식에는 하위 문자열 또는 분할 함수가 있는 루프를 사용하는 것이 포함될 수 있습니다.

위 내용은 정규식 및 글로벌 플래그와 중복되는 일치 항목을 얻으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿