用RegEx替换'8:25:43 PM'中的':43'

时间:2017-10-07 18:38:56

标签: javascript regex

我必须使用JS替换方法从8:25:43 PM中删除秒。

我尝试了一些不同的RegEx,例如/(:[0-9]{1,2})[^:]/g,但问题是它也匹配:25。我的目标是仅移除:43

非常感谢。

3 个答案:

答案 0 :(得分:0)

你可以使用负面预测,如下所示:

var result = '8:25:43 PM'.replace(/:\d+(?![\d:])/g, '');
console.log(result);

因此,只有当下一个字符不是冒号或数字时,才会删除后面的冒号和数字。

如果您的输入中还有时间指示已经没有秒,那么您需要更加谨慎,并首先确认您确实要删除秒:

var result = '8:25:43 PM'.replace(/(\d:\d+):\d+(?![:\d])/g, '$1');
console.log(result);

答案 1 :(得分:0)

(\d{1,2}:\d{1,2}):\d{1,2} (AM|PM)替换为$1 $2

regex101 demo

这会捕获HH:MMAM/PM部分并用HH:MM AM/PM

替换整个字符串



var result = '8:25:43 PM'.replace(/(\d{1,2}:\d{1,2}):\d{1,2} (AM|PM)/g, '$1 $2');
console.log(result);




答案 2 :(得分:0)

根本原因

由于回溯,/(:[0-9]{1,2})[^:]/g模式匹配8:25:43 PM中的分钟部分:匹配冒号后,[0-9]{1,2}抓住25 贪婪地并尝试匹配:以外的字符。由于:之后有25,因此正则表达式引擎回顾并看到它可以与[0-9]{1,2}匹配一个数字而不是两个数字,并且它与2匹配[0-9]{1,2} {}}和5[^:]

解决方案

任何已经存在的解决方案,或者甚至更简单的解决方案(假设时间值与PM / AM之间总是有空格):



console.log('8:25:43 PM'.replace(/:\d+(\s)/, '$1'));




解释

  • : - 冒号
  • \d+ - 一位或多位
  • (\s) - 捕获到第1组中的空格,稍后在使用$1反向引用替换后恢复。

请参阅regex demo