2012-11-26 4 views
0

자바 스크립트에서 내 정규 표현식에 문제가 있습니다. 일치해야한다고 생각하는 다음 코드가 있지만 그렇지 않습니다.일치하는 정규식을 얻는 데 문제가 있습니다

var rgx = new RegExp("{\d+:(\d+)}"); 

if (rgx.test("{0:00000}") == true) { 
    alert("match"); 
} 
else 
{ 
    alert("no match"); 
} 

여기서 test()를 사용해야하는지 잘 모르겠습니다. 내 정규 표현식에서 그룹을 잡으려고하지만 exec()는 나에게 같은 결과를주는 것처럼 보인다.

그래서 내가 뭘 잘못하고 있니? 당신은 또한해야, 그 결과를 캡처하려면

var rgx = /{\d+:(\d+)}/; 

: 당신이 리터럴 구문을 사용할 수 있습니다, 또는

var rgx = new RegExp("{\\d+:(\\d+)}"); 

:

+0

당신은 시작과'$에서''^ 사용할 수 있습니다

RegExp#exec

문자열이 일치하지 않을 경우 문자열이 일치하는 경우 일치 모든 캡처 그룹을 보유하는 배열을 반환하거나 null '끝 부분에서도 문자열이 완전히 일치하고 하위 문자열이 아닌지 확인해야합니다.하지만 그건 당신에게 달린 것입니다. – Ian

답변

5

문제는 당신이 당신의 정규식에서 \ 문자를 이스케이프 할 필요가 있다는 것입니다 test 또는 exec와 반대로 .match 함수를 사용하십시오. 일치하지 않는 경우는 null를, 일치하는 경우는 적어도 1 요소의 배열을 돌려줍니다.

var rgx = new RegExp("{\d+:(\d+)}"); 

첫 번째 (첫번째 syazdani에 의해 언급), 당신은 백 슬래시 문자열 이스케이프해야합니다 :

var rgx = new RegExp("{\\d+:(\\d+)}"); 

또는 더 나은 아직 문자 정규식을 사용

+1

리터럴 구문의 경우 +1입니다. RegExp 생성자는 거의 필요하지 않으며 필요한 모든 이스케이프 처리와 혼동을줍니다. – tjameson

0

는 정규식 여러 문제가 있습니다 :

var rgx = /{\d+:(\d+)}/ 

둘째, {}은 특별한 의미를 가지고 정규식은 이스케이프해야합니다

var rgx = /^\{\d+:(\d+)\}$/ 

RegExp#test 부울 참 /를 여부 false를 반환 : 이안에 의해 언급 한 바와 같이

var rgx = /\{\d+:(\d+)\}/ 

셋째, 당신이 일치하는 전체 문자열을 보장 할 수 있습니다 문자열이 일치합니다.

var matches = /\{\d+:(\d+)\}/.exec("{0:000000}"); 
if(matches){ 
    console.log(matches[1]); //logs "000000" 
} 
관련 문제