>웹 프론트엔드 >JS 튜토리얼 >RegExp의 전역 플래그가 여러 테스트에서 예기치 않은 결과를 생성하는 이유는 무엇입니까?

RegExp의 전역 플래그가 여러 테스트에서 예기치 않은 결과를 생성하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 14:31:10522검색

Why Does a Global Flag in RegExp Produce Unexpected Results with Multiple Tests?

전역 플래그가 예기치 않은 RegExp 결과를 생성할 수 있는 이유

전역 플래그(g)가 있는 정규식(RegExps)은 일반적으로 내에서 여러 패턴 발생을 찾는 데 사용됩니다. 문자열. 그러나 이 플래그를 대소문자를 구분하지 않는 플래그(i)와 함께 사용하면 예기치 않은 결과가 발생할 수 있습니다.

다음 예를 고려하세요.

var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
// result will be [true, false]

이 시나리오에서 테스트 메서드는 반환만 반환합니다. 첫 번째 반복에서는 true입니다. 이 동작을 이해하려면 g 플래그의 작동 방식을 고려해야 합니다.

g 플래그를 사용한 마지막 인덱스 추적

g 플래그와 함께 사용하면 RegExp 객체가 마지막 인덱스를 추적합니다. 경기가 발생한 곳. 후속 일치 항목에서 RegExp는 0 대신 이 마지막 인덱스에서 검색을 시작합니다.

이 개념 설명:

var query = 'Foo B';
var re = new RegExp(query, 'gi');
console.log(re.lastIndex); // Initial value is 0

console.log(re.test('Foo Bar')); // Matches at index 0
console.log(re.lastIndex); // Updated to 6

console.log(re.test('Foo Bar')); // No match, lastIndex is still 6
console.log(re.lastIndex); // Remains at 6

이 예에서는 Foo Bar 문자열에 다른 일치 항목이 포함되어 있어도 두 번째 테스트 호출은 RegExp가 이미 일치 항목을 지나 검색 위치를 이동했기 때문에 false를 반환합니다.

따라서 g 플래그를 i 플래그는 검색 문자열에 대소문자가 다양한 패턴의 여러 인스턴스가 포함된 경우 일치 항목이 누락될 수 있습니다. 이를 방지하려면 g 플래그 없이 i 플래그를 사용하거나 g 플래그와 함께 단일 테스트 호출을 사용하여 첫 번째 일치 항목만 찾는 것이 좋습니다.

위 내용은 RegExp의 전역 플래그가 여러 테스트에서 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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