如何使用正则表达式从字符串中提取时间格式

时间:2019-07-09 08:00:14

标签: javascript regex

我想从字符串"Last Updated on Jul 9 2019, 3:15 pm +08"中提取时间

<div id="demo"></div>
<script>
var str = "Last Updated on Jul 9 2019, 3:15 pm +08";

  var result = str.match(???);
    if(result) {
       document.getElementById("demo").innerHTML = result;
    }
</script>

或者可以提取日期和时间,但以['Jul 9 2019','3:15pm']

之类的数组形式提取

我是使用正则表达式的新手,也不知道如何制定模式。预先感谢!

4 个答案:

答案 0 :(得分:1)

您可以使用正向后视来查找字符串中的“ on”,抓住所有内容直到pm / am,然后在逗号和空格之间进行分割(假设格式一致):

const str = "Last Updated on Jul 9 2019, 3:15 pm +08"
console.log(str.match(/(?<=on ).*(p|a)m/)[0].split(', '))

  

请注意,积极的后向功能并非与所有浏览器都兼容,因此如果兼容性存在问题,我建议使用adiga's方法。

答案 1 :(得分:1)

您可以使用正则表达式/on ([^,]+),\s*(.*(?:am|pm))/,其中一个用于捕获日期,另一个用于捕获时间

var str = "Last Updated on Jul 9 2019, 3:15 pm +08";
var result = str.match(/on ([^,]+),\s*(.*(?:am|pm))/);
result.shift();

console.log(result)

Regex demo

答案 2 :(得分:0)

可以不使用正则表达式来完成此操作(假设时间格式与您给出的示例相同)。像这样:

var str = "Last Updated on Jul 9 2019, 3:15 pm +08";
var onlyTime = []
onlyTime.push(str.split(' ').slice(3,6).join(' ').slice(0, -1));
onlyTime.push(str.split(' ').slice(6,8).join(''));
console.log(onlyTime)

答案 3 :(得分:-1)

如果使用正则表达式,则可以使用'\ d {1,2}:\ d {2}(am | pm)'查找日期字符串中的时间。使用\ d {1,2},您的数字介于1到60之间,使用(am | pm),您可以找到字符串'am'或字符串'pm'。