替换每第n个等于“ x”的字符

时间:2019-09-18 14:23:19

标签: javascript

我有一个重复常用字符的字符串。

例如

x1234,x2345,x3456,x4567,x5678,x6789

我正在尝试使用javascript将字符首次出现的第n个出现的字符“ x”替换为字符“ d”。

最终输出应如下

d1234,x2345,d3456,x4567,d5678,x6789

4 个答案:

答案 0 :(得分:2)

您可以添加一个计数器,然后使用余数进行检查。

function replace(string, char, repl, n) {
    var i = 0;
    return string.replace(new RegExp(char, 'g'), c => i++ % n ? c : repl);
}

console.log(replace('x1234,x2345,x3456,x4567,x5678,x6789', 'x', 'd', 2));
console.log(replace('x1234,x2345,x3456,x4567,x5678,x6789', 'x', 'd', 3));

答案 1 :(得分:1)

var splittedWords = "x1234,x2345,x3456,x4567,x5678,x6789".split(",")
var result = splittedWords.map((element, index) => index % 2 ? element : "d" + element.substring(1))
console.log(result.join(","))

答案 2 :(得分:1)

function replaceNth(str, n, newChar) {
  const arr = str.split(',');
  return arr.map((item, i) => (i % n === 0) ? item.replace('x', newChar) : item).join(",")
}

const str = 'x1234,x2345,x3456,x4567,x5678,x6789';
// replace for every second string value
console.log(
  replaceNth(str, 2, 'd')
);
// replace for every third string value
console.log(
  replaceNth(str, 3, 'e')
);

答案 3 :(得分:0)

可以使用正则表达式匹配模式

var str1 = "x1234,x2345,x3456,x4567,x5678,x6789"
var result1 = str1.replace( /x([^x]+(x|$))/g, 'd$1')
console.log(result1)

var str2 = "x1234,x2345,x3456"
var result2 = str2.replace( /x([^x]+(x|$))/g, 'd$1')
console.log(result2)

reg exp的解释:RegExper

或者可以只进行简单的拆分,映射,联接

var str = "x1234,x2345,x3456,x4567,x5678,x6789"
var result = str.split(",")  // split on comma
  .map((part,index) => // loop over array
    index % 2 === 0  // see if we are even or odd
      ? "d" + part.substring(1) // if even, remove first character, replace with 1
      : part)  // if odd, leave it
  .join(",")  // join it back together
console.log(result)

这假定x始终在逗号之后,这可能是正确的,也可能不是。如果没有,那么逻辑就需要更复杂。