实际上,我想比较“持续时间字符串”。
var str1 = "2 Hours 15 Minutes"; //possible value "2 Hr 15 Min"
var str2 = "3 Hours 9 Minutes"; //possible value "3 Hr 9 Min"
if(str1 > str2) ???
最佳答案
如果需要通用解决方案,则需要确定需要支持的概括级别。从简单的正则表达式解析到更适合于神经网络的内容,范围很广。假设使用前者,则更简单的概括是使用已知单位支持和格式化为number units
的字符串。您可以进行简单的查找,以秒为单位提供单位。要更进一步,您甚至可以列出将被剥夺的连词列表,例如and
或plus
:
const units = {
'seconds': 1,
'minutes': 60,
'hours': 3600,
'hr': 3600,
'min': 60,
'sec': 1,
'days': 86400
// etc...
}
const stopwords = /and|plus|\+/gi // will be replaced with space
function gteSeconds(str) {
let times = str
.replace(stopwords, ' ')
.match(/\d+\s+\w+/g).map(t => t.split(/\s+/))
return times.reduce((total, [time, unit]) => total + time * units[unit.toLowerCase()]
, 0)
}
console.log(gteSeconds('3 Hours 9 Minutes'))
console.log(gteSeconds('20 seconds'))
console.log(gteSeconds('20 seconds 2 minutes'))
console.log(gteSeconds('1 Hr and 2 sec'))
console.log(gteSeconds('20 sec + 2 sec'))