亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用正則表達式替換不同的格式字符串?

如何使用正則表達式替換不同的格式字符串?

拉風的咖菲貓 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 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號