2010-02-17 4 views
1
text = 'ticket number #1234 and #8976 '; 
r = /#(\d+)/g; 

var match = r.exec(text); 

log(match); // ["#1234", "1234"] 

위의 경우 1234와 8976을 ​​모두 캡처하고 싶습니다. 어떻게해야합니까? 또한 문장에는 정수가 오는 '#'이 여러 개있을 수 있습니다. 따라서 솔루션은 최대 두 번 발생한다고 가정하면 하드 코딩하지 않아야합니다.자바 정규 표현식이 캡쳐되지 않더라도 # 문자를 반환합니다.

업데이트 : 그냥 궁금합니다. 다음 두 가지 경우를 체크 아웃하십시오.

var match = r.exec(text); // ["#1234", "1234"] 

var match = text.match(r); //["#1234", "#8976"] 

왜 두 번째 경우에는 캡처하지 않더라도 #가 표시됩니다. string.match가 캡처 규칙을 따르지 않는 것 같습니다. 사용 String.prototype.match 대신 RegExp.prototype.exec

답변

1

exec 나머지는 여러 번 가져옵니다.

while((match = r.exec(text))) 
    log(match); 
+2

이 null''비교하는 또 다른 방법입니다 :'((경기 = r.exec (텍스트)) == null이!) 동안' – Gumbo

1

: 한 번에 당신에게 모든 경기를 줄 것이다

var match = text.match(r); 

는 대신 한 번에 하나의 일치 (g 플래그가 필요합니다).

0

여기에 더 나은

var text = 'ticket number #1234 and #8976 '; 
var r = /#(\d+)/g; 

var matches = []; 
text.replace(r, function(all, first) { 
    matches.push(first) 
}); 

log(matches); 

// ["1234", "8976"] 
관련 문제