2012-07-30 3 views
1

가능한 중복 :
javascript string exec strange behavior자바 스크립트 정규식은 후속 호출에 null를 돌려

나는 정규식이 있고 난이

new_regex = /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g 

>> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g 

myregex = new RegExp(new_regex) 

>> /^[+-]?(\d+).*\s+(\d+).*\s+([\d\.]+)/g 

subject = "+39° 44' 39.28\"" 
>> "+39° 44' 39.28"" 

처럼 사용하고 있습니다 위의 다른 모든 시간에 대한 작품은 다음을 실행 :

myregex.exec(subject) 
>> ["+39° 44' 39.28", "39", "44", "39.28"] 

내가 그것을주는 실행 두 번째 널

myregex.exec(subject) 
>> null 
+0

http://stackoverflow.com/questions/1520800/why-regexp-with-global-flag-in-javascript-give-wrong-results –

+1

@PhilParsons 그 대답에는이'.exec' 행동을 일으키는 정규식의'g' 플래그가 없다는 언급이 없습니다. 내가 작성한 것과 같이 게시 된 하나의 apsillers가 훨씬 더 우수합니다. – Esailija

+0

@Esailija 아니요.하지만 질문하는 이유는 "JavaScript에서 ** 글로벌 ** 플래그를 사용하는 RegExp가 잘못된 결과를주는 이유는 무엇입니까?" –

답변

4

예, 그건 어떻게 세계 플래그 .exec 작동합니다. 당신이 그것을 동일한 주제를 전달하는 경우가 더 일치를 발견하지 않으며 반환 될 때까지, 다음 경기에 진출하게됩니다 null :

var str = "1111", 
    re = /1/g; 


re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str) // null 

당신은 다시 execing 전에 제목을 변경하여 재설정 할 수 있습니다

re.exec("") //Will reset it. 
리셋의

예 :이 귀하의 질문에 대한 대답

var str = "1111", 
    re = /1/g; 

re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(""); //Reset 
re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str); //["1"] 
re.exec(str) // null 
+0

매우 정확한 설명. 나는 요점을 얻었다. 다시 thnx –

관련 문제