Javascript时间转换正则表达式

标签 javascript regex

我有一个方法使用 .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);
}

现在我需要同样的使用 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;
}

是否正确?
你能给我指路吗?

问候,德米特里。

最佳答案

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

关于Javascript时间转换正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230526/

相关文章:

javascript - VueJS 资源重新加载内容

javascript - Angular 2 组合表单验证

javascript - 如果变量仅使用一次,则声明变量的原因

regex - 使用 sed 时的多个条件

java - 使用 Java Matcher 类匹配开始和结束字符

javascript - 如何在js中多次使用resize

Javascript灯箱未捕获类型错误: $ is not a function

regex - 使用awk按顺序匹配文件中的模式列表

php - 正确的正则表达式

python - 正则表达式:排除基于非捕获组的结果?