Javascript正则表达式用于格式化时间

时间:2018-10-23 19:42:49

标签: javascript regex

我们组织的样式指南以以下格式指定日期时间:Dec. 31 08:45 a.m.。我们的网站运行Drupal,这是一个基于PHP的CMS。它的字段格式模板允许使用HPHP的date()函数中定义的编码中指定的日期格式字符串。它仅提供a和{{1},其中pm给出A,而PM给出我NN:NN am,但是看不到任何带有句点的内容。

不幸的是,没有一种简单的方法可以挂接到平台上以定义自定义日期格式,因此我认为最简单的方法是使用javascript进行查找和替换。我想做的是将NN:NN pmNN:NN a.m.格式的实例替换为[0-9][0-9]:[0-9][0-9] pm等。

正则表达式从来不是我的强项。我可以很好地匹配日期时间格式(am),但是我不知道如何执行正确的替换。

pmitem.php遵循四位数的时间格式时,如何用正确缩写的版本替换?

4 个答案:

答案 0 :(得分:1)

一种替代方法是使用函数replace中的可选处理程序来获取匹配字符串,并将ampm字符串替换为a.mp.m分别。

let str = "Dec. 31 08:45 am",
    result = str.replace(/([\d][\d]:[\d][\d] am|pm)/, function(match) {
      return match.replace('am', 'a.m.').replace('pm', 'p.m.');
    });
    
console.log(result);

答案 1 :(得分:1)

str.replace(/(\d{2}:\d{2}\s?a|p)(m)/, '$1.$2');

答案 2 :(得分:1)

您可以使用以下正则表达式和替换模式来完成所需的操作:

正则表达式:([0-2][0-9]:[0-5][0-9]\s)(a|p)(m)

替换:“ $ 1 $ 2. $ 3。”

使用方法:

var text = 'Dec. 31 08:45 am';
text = text.replace(/([0-2][0-9]:[0-5][0-9] )(a|p)(m)/, '$1$2.$3.');

答案 3 :(得分:1)

'Dec. 31 08:45 AM, Jan. 1 10:15 pm'.replace(/(\d{2}:\d{2}) (a|p)(m)/ig, (match, p1, p2, p3) => {
  return `${p1} ${p2}.${p3}.`.toLowerCase();
});

产生结果

Dec. 31 08:45 a.m., Jan. 1 10:15 p.m.