我目前正在try 将一些用户输入解析到一些正则表达式组中,以便将以下输入输入到输出中.

我目前拥有的正则表达式是

^[0-9]+[d,D,h,H,m,M]$

这成功匹配了单个日期,例如1d2h.然而,我需要它 for each 单独的工作,即使有些不是由用户提供.

input: "5d"
output: {days: 5, hours: 0, minutes: 0}

input: "1d 2h"
output: {days: 1, hours: 2, minutes: 0}

input: "1d 5h 2m"
output: {days: 1, hours: 5, minutes: 2}

input: "2m"
output: {days: 0, hours: 0, minutes: 2}

输出不一定要在js对象中,简单地使用正则表达式组也是有好处的,我可以使用它.

任何帮助都将不胜感激,因为我不知道还能做什么.

推荐答案

您可以扩展正则表达式以包括天、小时和分钟的三个命名捕获组,然后使用组值填充输出对象:

const parseInterval = s => { 
  let res = regex.exec(s) || {}
  return { 
    days : +res.groups.days || 0,
    hours : +res.groups.hours || 0,
    minutes : +res.groups.minutes || 0
  }
}

const input = [ "5d", "1D 2h", "1d 5H 2m", "2M"]
const regex = /(?:(?<days>\d+)d)?\s*(?:(?<hours>\d+)h)?\s*(?:(?<minutes>\d+)m)?/i

const result = input.map(parseInterval)

console.log(result)

Javascript相关问答推荐

当我使用jQuery时,我的图标显示为[对象对象]

同步功能在中间停止

JavaScript Date对象在UTC中设置为午夜时显示不正确的日期

React状态变量在使用++前置更新时引发错误

如何使用JavaScript动态地将CSS应用于ToDo列表?

React对话框模式在用户单击预期按钮之前出现

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

React Native平面列表自动滚动

使用TMS Web Core中的HTML模板中的参数调用过程

Javascript,部分重排序数组

WebGL 2.0无符号整数输入变量

如何从隐藏/显示中删除其中一个点击?

Regex结果包含额外的match/group,只带一个返回

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

使用VUE和SCSS的数字滚动动画(&;内容生成)

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

在SHINY R中的嵌套模块中,不能使用Java代码

第一项杀死下一项,直到数组长度在javascript中等于1

使用Document.Evaluate() Select 一个包含撇号的HTML元素

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值