2013-10-18 2 views
2

javacript RegExp.test() 메서드가 호출 할 때마다 동일한 결과를 반환하지 않는 이유를 알 수 없습니다.RegExp.test()가 일관성이없는 이유는 무엇입니까?

다음과 같은 자바 스크립트 변수

var opener = '<span[^>]*>'; 
var regexo = new RegExp('^'+opener+'$', "g"); 

나는 다음을 수행 감안할 때 :

alert(regexo.test('<span class="outer">')); // true 
alert(regexo.test('<span class="inner">')); // false 
alert(regexo.test('<span class="inner">')); // true 

나는 같은 이상한 결과 파이어 폭스 24.0과 IE8에서 테스트.

true, true, true 대신 결과가 true, false, true 인 이유는 무엇입니까?

답변

11

g 플래그를 사용했기 때문입니다. 이것은 regexp 객체를 반복자로 바꾸고, 각 호출마다 상태가 바뀝니다. 당신이 내 하루가 만들어졌다

var regexo = new RegExp('^'+opener+'$'); 
+0

을 :

당신은 그래서 그냥 제거, 여기에 g 플래그가 필요하지 않습니다! – fluminis

+0

+1'g'가 전역 수정 자로 사용됩니다. 제거시 모든 조건을 만족하지 못할 수 있습니다. 확실하지 않다면 내가 틀렸을 때 나를 바로 잡으시오. – Praveen

+2

@ user1671639 미안하지만 당신의 의견을 이해할 수 없어, 네가 옳은지 모르겠다. 하지만 분명히하기 위해, 당신이'test' 함수를 사용할 때이 플래그를 사용할 좋은 이유가 있다고 생각하지 않습니다. –

관련 문제