如何使用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
答案 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;
答案 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')