我必须使用JS替换方法从8:25:43 PM
中删除秒。
我尝试了一些不同的RegEx,例如/(:[0-9]{1,2})[^:]/g
,但问题是它也匹配:25
。我的目标是仅移除:43
非常感谢。
答案 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
。
这会捕获HH:MM
和AM/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。