用正则表达式替换某个位置后的每个字符



我正试图使用正则表达式将给定位置(例如3(后的每个字符替换为占位符字符,用于任意长度的字符串(输出长度应与输入长度相同(。我认为一个前瞻性(前瞻性?(可以做到,但我不能让它发挥作用。

我现在拥有的是:

  • 正则表达式:/。(?=.{0,2}$(/
  • 输入字符串:"你好">
  • 替换字符串:'_'
  • 当前输出:"你好___"(最后3个替换(

我想要的输出是"hel ________"(除了前3个被替换外,其他都是(。

我在Typescript中这样做,以替换一些使用丑陋的拆分/连接逻辑的旧javascript。然而,我知道如何进行regex调用,所以答案应该是与语言无关的。

如果您知道字符串比给定的位置n长,则可以选择性地捕获起始部分

(^.{3})?.

并用例如CCD_ 1(捕获第一组和CCD_。如果字符串长度为<=,则无效n

在regex101 上查看此演示


另一个选项是在支持的范围内使用lookehind来检查前面是否有n字符。

(?<=.{3}).

请参阅regex101中的其他演示(仅用下划线替换(-这里的字符串长度无关紧要。


在PHP/PCRE中,可以简单地跳过起始部分,如下所示:^.{1,3}(*SKIP)(*F)|.

最新更新