使用Regex从日期和时间中获取时间

时间:2016-07-15 19:02:25

标签: javascript regex

如何使用Regex从12:05 AM中提取7/16/2016 12:05:00 AM

我到目前为止已经做到了

test = "7/16/2016 12:05:00 AM"
test.match(/^(\S+) (.*)/)[2]
> "12:05:00 AM"

但我无法弄清楚如何删除秒。另外,如果有更简单/更有效的方式来做我想做的事情,请告诉我。

我宁愿不依赖像moment.js这样的第三方库

注意:我想要的输出是12:05 AM而不只是12:05

3 个答案:

答案 0 :(得分:3)

明确查看数字和冒号,在匹配am / pm之前砍掉最后两个。我们还将第二个小时数字设为可选,以防我们只是匹配" 3:14:16 pm":

var test = "7/16/16 12:05:00 AM";
var matches = test.match(/(\d\d?:\d\d):\d\d(\s[ap]m)/i);
var time = matches && (matches[1] + matches[2]);
// time === "12:05 AM"

为了注意正则表达式的完整性,您还可以使用花括号来确定要计算的位数(我没有在上面,因为当它和&#39>时,它的结尾会有更多的字符。 #39; s只是1-2)。以下和以上都将匹配相同的字符串:

var matches = test.match(/(\d{1,2}:\d{2}):\d{2}(\s[ap]m)/i;

答案 1 :(得分:2)

简单而简短的替代方法是匹配您想要的部分,并用空字符串替换它们。

test.replace(/^\S*\s*|:\d\d(?!:)/g, "")

说明:

  • ^\S*\s* - 匹配日期和第一个空格
  • :\d\d(?!:) - 匹配前面的秒数和冒号;负向前瞻会阻止模式匹配分钟
  • g - '全球'旗;需要这个,因为我们有两个要替换的比赛

在这里试试:



window.go = function() {
    var input = document.getElementById("input").value;
    var output = input.replace(/^\S*\s*|:\d\d(?!:)/g, "");
    document.getElementById("output").value = output;
};

<input id="input" value="7/16/2016 12:05:00 AM">
<button onclick="go()">Click me!</button>
<input id="output">
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这是一种更简单的方法:

var time = test.split(' ')[1]
time = time.substring(0, time.length - 3)+' '+test.split(' ')[2] 

另外,如果您需要处理日期和时间,我建议Moment.js

moment(test).format('h:mm A')