2012-12-06 2 views
0

가능한 중복 :
Why RegExp with global flag in Javascript give wrong results?이상한 정규 표현식 행동

내 코드는 다음과 같다

,

HTML :

<p id="test"></p>​ 

자바 스크립트 :

var patt = /h/gi; 
var arr = ["", "2Hour", "4Hour", "8Hour", "Next Business Day"]; 
var test = document.getElementById("test"); 

for (var i = 0; i < arr.length; i++) 
{ 
    if (patt.test(arr[i])) { 
     test.innerHTML += " " + arr[i]; 
    } 
} 

하지만, 얻을 출력은 왜 4 시간 출력의 일부가 아니다, 2Hour 8Hour입니까?

내 정규식에 뭔가 문제가 있나요? 이 문제를 어떻게 해결할 수 있습니까?

내가 MDN 인용하면 fiddle

답변

5

에 올려했습니다 간부와 마찬가지로

을 (또는 그와 함께), 테스트는 에 여러 번에게 라고 동일한 글로벌 정규 표현식 인스턴스은 이전 일치 을 지나서 진행됩니다. ,

  1. patt에 저장되어있는 정규 표현식이 두 번째 문자열을 테스트 인덱스 1에서 일치를 발견하고,이 정보
  2. 당신이 test를 사용하는 다음 시간을 유지 :

현재 어떤 일이 일어나고 것은 인덱스 1 부터의 일치 항목을 찾으려고 시도합니다. 일치하는 항목이없는 것은 분명합니다. "our" 0을 효과적으로 테스트하고 있기 때문입니다.

  • 이 발견되는 인덱스 1에서 다음 문자열에서 일치를 허용, 0 포인터를 다시 설정합니다.
  • 그래서 문제를 해결하기 위해, 단순히 반복 될 때마다 새로운 인스턴스 생성 : 이것은 말하자면 "포인터를 삭제"하고 정규식은 각 문자열을 동일하게 작동을 보장

    for (var i = 0; i < arr.length; i++) 
    { 
        if (/h/gi.test(arr[i])) { 
         test.innerHTML += " " + arr[i]; 
        } 
    } 
    

    상대로 테스트. http://jsfiddle.net/QbXEX/12/

    +0

    니스 명확한 설명 : 여기에

    는 데모입니다. – garyh