正则表达式如何查找和替换每n个字符出现

时间:2018-06-29 08:02:32

标签: javascript regex

例如,如何查找和替换字符串中每隔三分之一的'x'字符并用正则表达式替换?

similar question,但它寻址第四个字符,但我需要字符串中第n个出现的特定字符。

我正在使用javascript replace()方法,以下示例将每个x字符更改为y:

NavBarModule

但是我该如何为上述问题编写正则表达式?

例如一些随机文本和预期结果:

  

我在Sxundxaxs上ax nexver axt hoxme。

收件人:

  

我在Sxundyaxs上架了斧。

我可以将JS replace(/\x/g, 'y') 循环与forsplit()一起使用,但是使用join()方法的解决方案似乎更加优雅。

1 个答案:

答案 0 :(得分:4)

您可以使用:

str = str.replace(/((?:[^x]*x){2}[^x]*)x/g, '$1y');

因此,如果您要搜索第三个匹配项,请在上述正则表达式的n-1之间使用{}

要动态构建,请使用:

let str = 'I amx nexver axt hoxme on Sxundxaxs';
let n = 3;
let ch = 'x';

let regex = new RegExp("((?:[^" +ch+ "]*" +ch+ "){" + (n-1) + "}[^" +ch+ "]*)" +ch, "g");

str = str.replace(regex, '$1y');

console.log(str);
//=> I amx nexver ayt hoxme on Sxundyaxs

RegEx Demo