전역 플래그에 대한 정규 표현식으로 인해 잘못된 출력이 발생하는 이유는 무엇입니까?
P粉282627613
2023-08-22 19:11:39
<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>
RegExp
개체를 사용하고 여러 번 실행하고 있습니다. 각 실행 시 마지막으로 일치하는 인덱스부터 계속됩니다.처음부터 시작하려면 각 실행 전에 정규식을 "재설정"해야 합니다.
으아아아즉, 매번 새로운 RegExp 객체를 생성하는 것이 더 읽기 쉬울 수 있습니다(RegExp가 이미 캐시되어 있으므로 오버헤드가 거의 없음).
으아아아g
标志的RegExp
对象会跟踪匹配发生的lastIndex
과 함께 사용되므로 후속 일치에서는 0부터 시작하지 않고 마지막으로 사용한 인덱스부터 시작됩니다. 예를 살펴보세요: