使用 RegEx 替换字符的每第 n 个实例

Replace every nth instance of a character using RegEx

我有一个竖线分隔的值字符串,如下所示:

s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | s19

我想要做的是将 | 的每六个实例替换为 ; 这样我就有了这样的东西..

s1 | s2 | s3 | s4 | s5 | s6 ; s7 | s8 | s9 | s10 | s11 | s12 ; s13 | s14 | s15 | s16 | s17 | s18 ; s19

我设法使用下面的代码替换了第二个管道,但每六个管道都没有运气。

"s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 | s12 

**".replace(/\|([^|]*)\|/g, '|:')**

如有任何建议,我们将不胜感激。

我不会为此使用正则表达式。相反,您可以拆分 | 并根据索引进行字符串构建。在 JavaScript:

string.split("|").reduce((prev, next, id) => prev + (id % 6 ? "|" : ";") + next);

如果你必须使用正则表达式,你可以查找这个模式 6 次并替换它之间的所有内容:

string.replace(/(.*?\|.*?\|.*?\|.*?\|.*?\|.*?)\|/g, ";")