为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正则表达式替换不同的格式字符串?

如何使用正则表达式替换不同的格式字符串?

拉风的咖菲猫 2023-02-24 16:08:15
我想把字符串"date: %H:%M:%S:%MS"变成"date: 01:02:03:04". 也就是说,用正确的数字替换每个格式说明符。const date = {    H: '01',    M: '02',    S: '03',    MS: '04',}const format = 'date: %H:%M:%S:%MS';format.replace(/%[H,M,S,MS]/g, (f) => date[f]); // like this but it's not working我怎样才能做到这一点 ?
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

你快到了。你想要的是:


format.replace(/%(H|M|S|MS)\b/g, (_, f) => date[f]);

// date: 1:2:3:4

匹配不同的字符组是通过()使用管道的捕获组完成的|,并且您还只需要在捕获组内匹配的字符(传递给函数的第二个参数)。最后, the\b匹配一个单词边界:你不想%MS被捕获组中的第一个匹配,你只想在the 之后有一个单词边界M的情况下这样做。%M:M


如果你还想有填充零:


format.replace(/%(H|M|S|MS)\b/g, (_, f) => date[f].toString().padStart(2, '0'));

// date: 01:02:03:04

或者,更简单,如果您愿意date稍微修改一下:


const date = {

    '%H': '01',

    '%M': '02',

    '%S': '03',

    '%MS': '04',

};


const format = 'date: %H:%M:%S:%MS';

format.replace(/%(H|M|S|MS)\b/g, f => date[f]);

// date: 01:02:03:04


查看完整回答
反对 回复 2023-02-24
?
繁星coding

TA贡献1797条经验 获得超4个赞

我可能会看到您的代码至少有 3 个问题:

  • 方括号在 RegExp 中的工作方式与您期望的不同

  • 匹配的子字符串(在捕获组内)是.replace()回调的第二个参数

  • 你的对象的值date是 type Number,所以你会松散0(例如01变成1

如果解决了以上所有问题,您可能会得到这样的结果:

const date = {

          H: 01,

          M: 02,

          S: 03,

          MS: 04,

      },

      format = 'date: %H:%M:%S:%MS',


      result = format.replace(

        /%(MS|H|M|S)/g, 

        (_,m) => 

          `${date[m]}`.padStart(2, '0')

      )

    

console.log(result)


查看完整回答
反对 回复 2023-02-24
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信