>  Q&A  >  본문

전역 플래그에 대한 정규 표현식으로 인해 잘못된 출력이 발생하는 이유는 무엇입니까?

<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粉282627613P粉282627613424일 전487

모든 응답(2)나는 대답할 것이다

  • P粉399090746

    P粉3990907462023-08-23 00:35:02

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

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

    으아아아

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

    으아아아

    회신하다
    0
  • P粉523335026

    P粉5233350262023-08-23 00:21:13

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

    으아악

    회신하다
    0
  • 취소회신하다