2011-04-19 4 views
1

예상대로 작동하지 않는, 즉, 배열에자바 스크립트 정규 표현식이 나는 정규 표현식에 일한지

3d 4m 5y 

의 형식에서 날짜를 구문 분석합니다.

나는이 같은 정규 표현식을 작성했습니다 :

((\d+)([d,m,y])) 

이것이 반환하는 나는 그것이 문자열

에 대한

["3d", "3d", "3", "d","4m","4","m"] 

를 반환해야 믿을 때

["3d", "3d", "3", "d"] 

입니다

3d4m 
그것은이 같은 내 코드에서 구현

:

c=console; 
myregexp=/((\d+)([d,m,y]))/g; 
//myregexp = new RegExp(regexstring); 
c.log(myregexp.exec($("#dateInterval").val())); 

지금 난 단지 데이터를 기록하고있어,하지만 뭔가 여기 잘못이라고 나는 생각합니까.

+0

'exec'은 아마도 당신을 위해 그들을 재귀 적으로 그룹화하지 않을 것입니다. 'console.log ('3d 4m 5y'.match (myregexp))'를 목표로하지 않으시겠습니까? –

+3

이것은 당신의 문제와 관련이 없지만 캐릭터 클래스에서 쉼표를 제거해야합니다 :'[dmy]'는 당신이 원하는 것입니다. 그렇지 않으면 쉼표도 일치합니다. –

답변

2

당신이 쓴 :

나는 그것이 옳지 않아

["3d", "3d", "3", "d","4m","4","m"] 

을 반환해야한다 생각합니다.

'g'옵션을 사용하는 정규 표현식을 사용하여 exec()를 호출하면 처리가 완료 될 때까지 처리를 계속하도록 지시합니다. 반환 배열은 모든 일치 집합이 아닙니다. 최종 일치 시도를위한 모든 캡처 세트입니다. 첫 번째 반복에서는 ["3d", "3d", "3", "d"]이됩니다. 두 번째 반복에서는 ["4m", "4m", "4", "m"]이됩니다. 첫 번째 반복의 캡처 그룹이 바뀝니다. 즉, 1 차 반복에서 첫 번째 캡처에있는 '3d'는 두 번째 반복에서 첫 번째 캡처 그룹에서 4로 오버 덮어 쓰입니다.

모든 일치 항목을 가져 오려면 문자열을 걸을 수 있습니다. 다음과 같이하십시오 :

function test2() 
{ 
    var value = "3d4m"; // $('#element').val() 
    var re="(\\d+)([dmy])"; 
    var myregexp = new RegExp(re); 
    while (value != "") 
    { 
     say("input: " + value); 
     var result = myregexp.exec(value); 
     if (result !== null) { 
      say("r[1]: " + result[0]); // 3d on 1st iteration, 4m on 2nd, etc. 
      value = value.substr(result[0].length); 
     } 
    } 
} 
1

여기 오프 기반을 수 있지만 W3 학교에 따라 수 : 그것은 일치하는 항목을 찾은 경우

exec()

이 방법은 일치하는 텍스트 를 반환, 그렇지 않은 경우는 null를 돌려줍니다 . 일치하는 항목이없는 경우

match()

이 방법은 경기의 배열을 돌려줍니다.

이렇게하면 exec()는 단일 결과 만 반환 할 것입니다.

Here's a fiddle 동일한 정규 표현식을 사용하는 두 가지 다른 방법을 사용하여 다른 결과를 산출합니다.

+1

w3schools == W3 워드 프로세서, 뭐야? – user422039

+0

woops .. 학교를 의미 : P –

관련 문제