繁体   English   中英

正则表达式可替换两个选项之间的字符

[英]Regex expression to replace characters between two options

我正在尝试创建一个优雅的正则表达式来替换以下字符串:

12:00:00 am到此: 12:00 AM : 12:00 AM

或也替换: 12:00 am : 12:00 am : 12:00:23 am12:00 am

我的意思是,我想删除最后的: :00和替换amAM

这是我的想法(但不见了):

"12:00:00 a. m.".replace(/(:*)?(.*\s)/, "");

非常感谢您的帮助:)

您可以将此正则表达式与两个捕获组一起使用,以一次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 am')); console.log(func('12:34:56 am')); console.log(func('12:12:34 pm')); console.log(func('12:34:56pm')); console.log(func('12:34:56p. m')); 

这在某种程度上取决于您想要成为什么样的人,但这似乎可行:

 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 am")); console.log(replaceTime("12:00:23 am")); 

我假设您在这里没有做任何验证工作。 这样,两个链接的raplece()方法将完成此工作:

str.replace(/^(.*):\d+/, '$1')
    .replace(/([a-z])[. ]*/g, ($0, $1) => $1.toUpperCase())

以上作品适用于pmpm

ES5:

 console.log("12:00:00 am".replace(/^(.*):\\d+/, '$1') .replace(/([az])[. ]*/g, function($0, $1) { return $1.toUpperCase(); })) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM