글로벌 플래그가 포함된 Regexp의 잘못된 결과
제공된 코드에서는 정규식 new RegExp(query, 'gi')가 사용되었습니다. g(전역) 및 i(대소문자 구분 안 함) 플래그를 모두 사용합니다. 그러나 결과는 예상치 못한 것입니다: [true, false].
전역 플래그 이해
RegExp 객체의 g 플래그는 test()의 동작을 제어합니다. 방법. 설정되면 test()는 이전 일치 항목이 끝난 위치부터 시작하여 문자열의 패턴을 반복적으로 검색합니다. 이를 "고착성"이라고 합니다.
잘못된 결과 설명
예제에서 re.test('Foo Bar')에 대한 첫 번째 호출은 " 푸 B." g 플래그가 설정되어 있으므로 lastIndex는 "Foo B" 이후의 위치로 업데이트됩니다. 이는 re.test('Foo Bar')에 대한 후속 호출이 "Foo B" 다음 위치부터 검색을 시작함을 의미합니다. 일치하는 항목이 없어 잘못된 결과가 발생합니다.
고정 플래그의 예
다음 코드를 고려하세요.
var reg = /^a$/g; for(i = 0; i++ < 10;) console.log(reg.test("a"));
이 코드는 인쇄됩니다. "진짜" 10번. reg에는 g 플래그가 있으므로 마지막 일치 항목을 고수하며 이전 일치 항목 이후부터 문자열 끝까지 "a"를 반복적으로 테스트합니다.
해결책
원본 코드를 수정하려면 각 test() 호출 전에 re.lastIndex를 0으로 재설정하세요.
var query = 'Foo B'; var re = new RegExp(query, 'gi'); result.push(re.test('Foo Bar')); re.lastIndex = 0; result.push(re.test('Foo Bar'));
이렇게 하면 다음이 보장됩니다. 검색은 각 test() 호출에 대한 문자열의 시작 부분부터 시작하여 [true, true]라는 올바른 결과를 산출합니다.
위 내용은 전역 정규식의 'test()' 메서드가 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!