2013-04-26 66 views
3

我有一個方法使用.Net中的正則表達式來轉換時間從例如。 「1小時20分鐘」的格式翻倍。就這個。Javascript時間轉換正則表達式

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); 
} 

現在我需要相同的使用Javascript。我試圖根據http://www.w3schools.com/jsref/jsref_regexp_nfollow.asp轉換正則表達式,但所有嘗試失敗。正則表達式中我很窮。

這是我的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; 
} 

它正確嗎?
你能告訴我方式嗎?

問候,德米特里。

回答

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 2013-04-26 08:12:05

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") 
相關問題