替换第n次出现javascript

时间:2016-07-20 08:42:52

标签: javascript regex str-replace

在此示例字符串'1,2,3,4,5'中我试图捕获并替换逗号,字符的第三次出现

这里的代码

'1,2,3,4,5'.match(/(?:[^,]*,){2}[^,]*(,)/)

匹配1,2,3和逗号我正在寻找 但不知道如何只更换逗号

'1,2,3,4,5'.replace(/(?:[^,]*,){2}[^,]*(,)/, "$")

替换4 $4,5

之前的所有内容

我只想要一个字符串结果,例如1,2,3$4,5

我已经以两种不同的方式完成了这项任务,包括数组拆分和使用String#replace进行回调

//splice
let parts = [];
let str = "1,2,3,4,5"; 
let formatted = ((parts = str.split(",")).slice(0,3)).join("-") + ' ' + parts.slice(3).join(":")
​
//callback
let str = "1,2,3,4,5"; 
str.replace(/,/g, (() => {
  let count = 0;
  return (match, position) => {
    count += 1;
    if(count == 3) return ' ';
    else if(count < 3) return '-';
    else return ':';        
  });
})())

这是否可以使用普通String#replace

1 个答案:

答案 0 :(得分:1)

您可以使用捕获组并通过首先捕获组替换

.replace(/((?:[^,]*,){2}[^,]*),/g, "$1:");
          ^                  ^

捕获的组将捕获匹配的字符串,但替换字符串中的第三个逗号除外$1

&#13;
&#13;
console.log('1,2,3,4,5,2,3,4,5,2,3,4,5'.replace(/((?:[^,]*,){2}[^,]*),/g, "$1:"));
&#13;
&#13;
&#13;