正则表达式(JS):字符出现不超过N次

MGX*_*MGX 1 javascript regex

我有以下字符串:

11110000111100000000111100001111000000
Run Code Online (Sandbox Code Playgroud)

在这个字符串中,我想将0出现次数少于6次的s逐一替换。如果它们出现6次或更多,我想保留它们。

(例如用点替换它们)

最终结果应该是

1111....1111000000001111....1111000000
Run Code Online (Sandbox Code Playgroud)

我考虑过使用否定前瞻并尝试过,但我不确定它在特定用例中如何工作。

有人可以帮助我吗?

我当前无法正常工作的正则表达式是

/(?!0{6,})0{1,5}/g
Run Code Online (Sandbox Code Playgroud)

编辑

经过一番尝试后,我发现了这个正则表达式:

/((?:^|1)(?!0{6,})0{1,5})/g
Run Code Online (Sandbox Code Playgroud)

但它捕获了s1之前的0。有没有办法排除它1陷入正则表达式中?

bob*_*ble 5

Javascriptreplace可以用函数作为替代,例如:

let res = s.replace(/0+/g, m => {
  return (x = m.length) < 6 ? '.'.repeat(x) : m;
});
Run Code Online (Sandbox Code Playgroud)

请访问 tio.run 查看此演示

没有太多需要解释的。匹配一个或多个0。如果匹配项少于 6 个字符,则返回由其长度重复替换字符组成的字符串,否则返回完整匹配项。