Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式从日期和时间获取时间_Javascript_Regex - Fatal编程技术网

Javascript 使用正则表达式从日期和时间获取时间

Javascript 使用正则表达式从日期和时间获取时间,javascript,regex,Javascript,Regex,如何使用正则表达式从2016年7月16日12:05:00 AM中提取12:05 AM 我已经走了这么远 test = "7/16/2016 12:05:00 AM" test.match(/^(\S+) (.*)/)[2] > "12:05:00 AM" 但我不知道如何删除秒。另外,如果有更简单/更有效的方法来做我正在尝试做的事情,请让我知道 我宁愿不依赖第三方库,比如moment.js 注意:我希望的输出是12:05 AM,而不仅仅是12:05这是一种更简单的方法: var time

如何使用正则表达式从2016年7月16日12:05:00 AM<代码>中提取
12:05 AM

我已经走了这么远

test = "7/16/2016 12:05:00 AM"
test.match(/^(\S+) (.*)/)[2]
> "12:05:00 AM"
但我不知道如何删除秒。另外,如果有更简单/更有效的方法来做我正在尝试做的事情,请让我知道

我宁愿不依赖第三方库,比如moment.js


注意:我希望的输出是
12:05 AM
,而不仅仅是
12:05

这是一种更简单的方法:

var time = test.split(' ')[1]
time = time.substring(0, time.length - 3)+' '+test.split(' ')[2] 
此外,如果你需要与日期和时间工作,我会建议

这是一种更简单的方法:

var time = test.split(' ')[1]
time = time.substring(0, time.length - 3)+' '+test.split(' ')[2] 
此外,如果你需要与日期和时间工作,我会建议


明确查找数字和冒号,在匹配am/pm之前去掉最后两个。我们还将第二个小时数字设置为可选,以防与“下午3:14:16”匹配:


要注意正则表达式的完整性,您还可以使用大括号来确定要计数的位数(上面我没有提到,因为只有1-2个字符时,最后会有更多字符)。以下和以上内容将匹配同一字符串:

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

明确查找数字和冒号,在匹配am/pm之前去掉最后两个。我们还将第二个小时数字设置为可选,以防与“下午3:14:16”匹配:


要注意正则表达式的完整性,您还可以使用大括号来确定要计数的位数(上面我没有提到,因为只有1-2个字符时,最后会有更多字符)。以下和以上内容将匹配同一字符串:

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

一个简单而简短的替代方法是匹配不需要的部分,并用空字符串替换它们

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

  • ^\S*\S*
    -匹配日期和第一个空格
  • :\d\d(?!:)
    -匹配秒及其前面的冒号;负前瞻会阻止模式与分钟数匹配
  • g
    -“全局”标志;需要这个,因为我们有两个火柴要更换
请在此处尝试:

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

点击我!

一个简单而简短的替代方法是匹配不需要的部分,并用空字符串替换它们

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

  • ^\S*\S*
    -匹配日期和第一个空格
  • :\d\d(?!:)
    -匹配秒及其前面的冒号;负前瞻会阻止模式与分钟数匹配
  • g
    -“全局”标志;需要这个,因为我们有两个火柴要更换
请在此处尝试:

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

点击我!

搜索第一个冒号(:)并检索其前后的2个字符。搜索第一个冒号(:)并检索其前后的2个字符。您忘记将AM放回末尾:)您忘记将AM放回末尾:)您可能希望
(\d{1,2}:\d{2})作为第一组。。。时间带有am/pm后缀这一事实表明,可能不存在“03:14:16 am”的前导
0
,它可能是“3:14:16 am”,谢谢!我已经根据@StephenP的建议清理了它:
test.match(/(\d{1,2}:\d{2}):\d{2}(\s[ap]m)/I)@Katie,哈哈,我刚才对答案也做了同样的回答。干得好!您可能想要
(\d{1,2}:\d{2})
作为您的第一组。。。时间带有am/pm后缀这一事实表明,可能不存在“03:14:16 am”的前导
0
,它可能是“3:14:16 am”,谢谢!我已经根据@StephenP的建议清理了它:
test.match(/(\d{1,2}:\d{2}):\d{2}(\s[ap]m)/I)@Katie,哈哈,我刚才对答案也做了同样的回答。干得好!