2013-04-26 3 views
3

.Net에서 정규 표현식을 사용하는 방법으로 시간을. "1h 20m"형식으로 두 배로 늘립니다. 여기 있습니다. 자바 스크립트 시간 변환 정규식

public static double? GetTaskHours(this string tmpHours) { 
    Double taskHours = 0; 
    if (!string.IsNullOrEmpty(tmpHours) && !double.TryParse(tmpHours, out taskHours)) { 
    var match = Regex.Match(tmpHours, @"^(?=\d)((?<hours>\d+)(h|:))?\s*((?<minutes>\d+)m?)?$", RegexOptions.ExplicitCapture); 
    if (match.Success) { 
     int hours; 
     int.TryParse(match.Groups["hours"].Value, out hours); 
     int minutes; 
     int.TryParse(match.Groups["minutes"].Value, out minutes); 
     taskHours = (double)hours + (double)minutes/60; 
    } 
    } 
    return Math.Round(taskHours, 3); 
} 

는 지금은 같은 사용하여 자바 스크립트가 필요합니다. http://www.w3schools.com/jsref/jsref_regexp_nfollow.asp에 따라 정규식을 변환하려고했지만 내 모든 atempts가 실패했습니다. 나는 정규 표현식이 매우 형편 없다.

여기 내 JS 시도입니다.

function getHours(value) { 
    var myArray = value.match(/^(?=\d)((\d+)(h|:))?\s*((\d+)m?)?$/g); 
    var hours = myArray[2]; 
    var minutes = myArray[5]; 
    return Number(hours) + Number(minutes)/60; 
} 

맞습니까?
제게 보여 주실 수 있습니까?

감사합니다. Dmitry.

답변

2

String.match 메서드는 그룹이 아닌 전체 일치 배열 만 반환합니다. 모든 그룹을 얻기 위해 Regex.exec 방법을 사용

function getHours(value) { 
    var myArray = (/^((\d+)(h|:))?\s*((\d+)m?)?$/g).exec(value); 
    var hours = myArray[2]; 
    var minutes = myArray[5]; 
    return Number(hours) + Number(minutes)/60; 
} 
+0

예, I've이 권리를 발견 – StNickolas

0

난 당신이 정말로 수행 g 수정을 필요로 가정합니다. 그래서 당신이 시도 할 수 있습니다 : )을 (단지 g 제거) 당신이 게시하기 전에

function getHours(value) { 
    var myArray = value.match(/^(?=\d)((\d+)(h|:))?\s*((\d+)m?)?$/); 
    var hours = myArray[2]; 
    var minutes = myArray[5]; 
    return Number(hours) + Number(minutes)/60; 
} 
getHours("3h 30m")