我正在尝试创建一个优雅的正则表达式来替换以下字符串:
12:00:00 a. m.
对此:
12:00 AM
或也替换:
12:00:23 a.m.
至12:00 am
我的意思是,我想删除最后一个::00
并将a. m.
替换为AM
这就是我的想法(但不见了):
"12:00:00 a. m.".replace(/(:*)?(.*\s)/, "");
非常感谢您的帮助:)
答案 0 :(得分:2)
您可以将此正则表达式与两个捕获组一起使用,以在单个replace
中进行操作:
/:\d\d\s*(\w)\.?\s*(\w)\.?/
const func = str => str.replace(/:\d\d\s*(\w)\.?\s*(\w)\.?/, (a, b, c) => {
return ` ${b}${c}`.toUpperCase();
});
console.log(func('12:12:34 a. m.'));
console.log(func('12:34:56 a.m.'));
console.log(func('12:12:34 pm'));
console.log(func('12:34:56pm'));
console.log(func('12:34:56p. m'));
答案 1 :(得分:1)
这在某种程度上取决于您想成为什么样的人,但这似乎可行:
function replaceTime(str) {
return str.replace(/(\d{2}:\d{2}):\d{2}/, "$1")
.replace(/\s*a\.*\s*m\.*/, " AM");
}
console.log(replaceTime("12:00:00 a. m."));
console.log(replaceTime("12:00:23 a.m"));
答案 2 :(得分:1)
我假设您在这里没有进行任何验证工作。这样,两个链接的raplece()
方法就可以完成工作:
str.replace(/^(.*):\d+/, '$1')
.replace(/([a-z])[. ]*/g, ($0, $1) => $1.toUpperCase())
以上适用于p. m.
或pm
。
ES5:
console.log("12:00:00 a. m.".replace(/^(.*):\d+/, '$1')
.replace(/([a-z])[. ]*/g, function($0, $1) { return $1.toUpperCase(); }))