【问题标题】:Replace character before date match在日期匹配之前替换字符
【发布时间】:2021-08-13 11:46:43
【问题描述】:

我想替换字符串中日期前面的下划线,例如

thequick_brown_20210813_fox

收件人:

thequick_brown_red_20210813_fox

即将该下划线替换为_red_

这会捕获日期部分:(20\d{2})(\d{2})(\d{2})

而替换我假设我可以使用str.replace

但不确定如何捕获它前面的下划线。

【问题讨论】:

  • “但不确定如何捕获下划线” - 将其添加到正则表达式中,然后仅将匹配项替换为日期。 -> 到目前为止,您尝试过什么来自己解决这个问题?
  • 使用/_(?=20\d{6}_)/

标签: javascript regex replace


【解决方案1】:

您可以尝试以下正则表达式与正前瞻:

/_(?=\d{8})/

地点:

_ 匹配字符 _

(?=\d{8}) - 正向预测

\d - 匹配一个数字(相当于 [0-9])

{8} - 准确匹配前一个令牌 8 次

var str = 'thequick_brown_20210813_fox';
var patt = /_(?=\d{8})/;
str = str.replace(patt, '_red_');
console.log(str);

【讨论】:

  • 这是一个前瞻性 :)
  • 我们有几乎相同的解决方案 :) 但是我必须承认我对var 过敏 :))))))
  • 当它不要求 8 位日期以“20”开头时,为什么这是公认的答案?
  • @Booboo 我明白你的意思,但是我像这样调整了正则表达式_(?=20\d{6}) ....这似乎有效
【解决方案2】:

这行得通

作为奖励,我有一个超级健壮的日期正则表达式

const str = 'thequick_brown_20210813_fox';
const re = /_(?=\d{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01]))/;
const newStr = str.replace(re, '_red_');
console.log(newStr);

正则表达式是from here

【讨论】:

  • 那个日期正则表达式太棒了! :D
  • 为什么会有粗体字? OP 应该如何处理 “This works”?为什么 "bonus"(从外部资源复制)与 OP 相关?
  • @apples-oranges 不是真的。 “超级健壮” 正则表达式也应该适用于闰年。它并不比一个简单的_[0-9]{8}...
  • @Andreas :)))))))))))))))))
  • 与 OP 的正则表达式不同,这不会查找以“20”开头的日期,但应该查找。一些奖金,嗯。
【解决方案3】:

这是我使用您提供的 RegEx 得出的结果。

let str = "thequick_brown_20210813_fox";
let newStr = "";
let regex = /(20\d{2})(\d{2})(\d{2})/;

let splits = str.split(regex);
newStr += splits[0] + "red_";
for(let i=1; i<splits.length; i++){
    newStr += splits[i];
}

console.log(newStr);

【讨论】:

    【解决方案4】:

    我会用作匹配的正则表达式:

    _(?=20[0-9]{6})
    
    1. _ 匹配下划线 if ...
    2. (?=20[0-9]{6}) 这是一个前瞻断言,即以下字符必须是 '20' 后跟 6 位数字。

    请注意,上述内容仅在后跟“20”后跟另外 6 位数字时匹配下划线。所以我们简单地将下划线替换为'_red_':

    let s = 'thequick_brown_20210813_fox';
    s = s.replace(/_(?=20[0-9]{6})/g, '_red_');
    console.log(s);

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多