实际上,我想比较“持续时间字符串”。

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的字符串。您可以进行简单的查找,以秒为单位提供单位。要更进一步,您甚至可以列出将被剥夺的连词列表,例如andplus



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'))

07-28 10:45