3

.Net で正規表現を使用して、たとえば「1h 20m」形式から double に時間を変換する方法があります。はい、これ。

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

それが正しいか?
道を教えてもらえますか?

よろしく、ドミトリー。

4

2 に答える 2

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;
}
于 2013-04-26T07:56:03.987 に答える