전역 플래그(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 플래그와 함께 사용하면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!