전역 플래그에 대한 정규 표현식으로 인해 잘못된 출력이 발생하는 이유는 무엇입니까?
P粉282627613
P粉282627613 2023-08-22 19:11:39
0
2
528
<p>전역 플래그와 대소문자를 구분하지 않는 플래그를 사용할 때 이 정규식에 어떤 문제가 있나요? 쿼리는 사용자가 생성한 입력입니다. 결과는 [참, 참]이어야 합니다. </p> <pre class="brush:php;toolbar:false;">var query = 'Foo B'; var re = new RegExp(query, 'gi'); var 결과 = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar')); // 결과는 [true, false]</pre>입니다. <시간> <p> <pre class="snippet-code-js lang-js Prettyprint-override"><code>var reg = /^a$/g; for(i = 0; i++ < 10;) console.log(reg.test("a"));</code></pre> </p>
P粉282627613
P粉282627613

모든 응답(2)
P粉399090746

RegExp 개체를 사용하고 여러 번 실행하고 있습니다. 각 실행 시 마지막으로 일치하는 인덱스부터 계속됩니다.

처음부터 시작하려면 각 실행 전에 정규식을 "재설정"해야 합니다.

으아아아

즉, 매번 새로운 RegExp 객체를 생성하는 것이 더 읽기 쉬울 수 있습니다(RegExp가 이미 캐시되어 있으므로 오버헤드가 거의 없음).

으아아아
P粉523335026

g 标志的 RegExp 对象会跟踪匹配发生的 lastIndex과 함께 사용되므로 후속 일치에서는 0부터 시작하지 않고 마지막으로 사용한 인덱스부터 시작됩니다. 예를 살펴보세요:

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿