我正在尝试创建一个优雅的正则表达式来替换以下字符串:
12:00:00 a. m. to this:12:00 AM
或者也替换为:12:00:23 a.m. to 12:00 am
我的意思是,我想删除最后一个::00,并用AM替换a. m.
这就是我所想的(但没有):
"12:00:00 a. m.".replace(/(:*)?(.*\s)/, "");非常感谢您的帮助:)
发布于 2019-03-15 06:23:56
您可以将此正则表达式与两个捕获组一起使用,以便在单个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'));
发布于 2019-03-15 06:26:17
这在一定程度上取决于你想要的通用程度,但这似乎是有效的:
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"));
发布于 2019-03-15 06:30:19
我假设您在这里没有做任何验证工作。这样,两个链接的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(); }))
https://stackoverflow.com/questions/55172805
复制相似问题