正则表达式匹配时间格式的 1 位数字并替换为 2 位数字

Posted

技术标签:

【中文标题】正则表达式匹配时间格式的 1 位数字并替换为 2 位数字【英文标题】:Regex Match 1 Digit From Time Format And Replace With 2 Digits 【发布时间】:2021-04-28 19:23:34 【问题描述】:

我有这样的文字

Thu 8 Apr,4:45,5:54,11:55,3:12,5:55,7:00

我想将 1 位数小时改为 2 位数,这样我就可以得到

04:45,05:54,11:55,03:12,05:55,07:00

我尝试了下面的正则表达式

(\d1:\d+,)|(?:\d2:\d+,)|(\d:\d+)

将匹配列表替换为

0$&

并获取列表:

04:45,05:54,011:55,03:12,05:55,07:00

如您所见,11:55 也加了 0,如何解决这个问题才能使 2 位数字不加 0? 谢谢!

【问题讨论】:

匹配/\b\d:/并替换为0$& 【参考方案1】:

将我的评论转换为答案,以便将来的访问者轻松找到解决方案。

javascript 中,您可以使用此正则表达式进行匹配:

\b\d:

并替换为:

0$&

RegEx Demo

正则表达式详细信息:

\b: 匹配单词边界 \d:匹配单个数字 ::匹配冒号 0$&: 是将0 放在每个匹配的子字符串之前的replacement

代码:

const s = `Thu 8 Apr,4:45,5:54,11:55,3:12,5:55,7:00`

var r = s.replace(/\b\d:/g, '0$&')

console.log( r )

//=> Thu 8 Apr,04:45,05:54,11:55,03:12,05:55,07:00

【讨论】:

【参考方案2】:

使用

\b([0-9]:)

替换为0$1。见proof。结果:Thu 8 Apr,04:45,05:54,11:55,03:12,05:55,07:00

解释

--------------------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
    :                        colon
--------------------------------------------------------------------------------
  )                        end of \1

【讨论】:

以上是关于正则表达式匹配时间格式的 1 位数字并替换为 2 位数字的主要内容,如果未能解决你的问题,请参考以下文章

js 正则表达式 要求密码的格式为6-12位,只能是字母、数字和下划线

js 正则表达式 要求密码的格式为6-12位,只能是字母、数字和下划线

mysql 正则表达式 如何截取字符串中指定格式的字符

js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位

sql正则匹配连续增加数字

js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位