首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换两个选项之间的字符的正则表达式

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

Stack Overflow用户
提问于 2019-03-15 06:13:20
回答 3查看 50关注 0票数 2

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

12:00:00 a. m. to this:12:00 AM

或者也替换为:12:00:23 a.m. to 12:00 am

我的意思是,我想删除最后一个::00,并用AM替换a. m.

这就是我所想的(但没有):

代码语言:javascript
复制
"12:00:00 a. m.".replace(/(:*)?(.*\s)/, "");

非常感谢您的帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-15 06:23:56

您可以将此正则表达式与两个捕获组一起使用,以便在单个replace中执行此操作

/:\d\d\s*(\w)\.?\s*(\w)\.?/

​

代码语言:javascript
复制
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'));

​

票数 2
EN

Stack Overflow用户

发布于 2019-03-15 06:26:17

这在一定程度上取决于你想要的通用程度,但这似乎是有效的:

​

代码语言:javascript
复制
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"));

​

票数 1
EN

Stack Overflow用户

发布于 2019-03-15 06:30:19

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

代码语言:javascript
复制
str.replace(/^(.*):\d+/, '$1')
    .replace(/([a-z])[. ]*/g, ($0, $1) => $1.toUpperCase())

上面的代码适用于p. m.或pm。

ES5:

​

代码语言:javascript
复制
console.log("12:00:00 a. m.".replace(/^(.*):\d+/, '$1')
        .replace(/([a-z])[. ]*/g, function($0, $1) { return $1.toUpperCase(); }))

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55172805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档