替换第 n 次出现 javascript

Replace nth occurrence javascript

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

此代码在这里

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

匹配 1,2,3 和我正在寻找的逗号 但不确定如何只替换逗号

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

替换 4 之前的所有内容,给出 ,5

我只想要一个字符串结果,例如 1,2,3,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 实现吗?

您可以使用捕获组并替换为第一个捕获组

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

捕获的组将捕获替换字符串中除第三个逗号</code>之外的匹配字符串。</p> <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code"> <pre><code>console.log('1,2,3,4,5,2,3,4,5,2,3,4,5'.replace(/((?:[^,]*,){2}[^,]*),/g, ":"));