我有一种使用 .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 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)