javascript - 替换第 n 次出现的 javascript

标签 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 是否可以做到这一点?

最佳答案

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

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

捕获的组将捕获替换字符串中除第三个逗号(即 $1)之外的匹配字符串。

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

关于javascript - 替换第 n 次出现的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476413/

相关文章:

javascript - 无法将样式分配给表中动态创建的列

regex - 从字符串中修剪字符串

php - PHP 中 str_replace 的性能

javascript - 合并 2 个具有不同值类型的数组

javascript - Next.js 将静态路由与动态路由重叠

javascript秒表用户输入

regex - bash:正则表达式提取

regex - 如何从oracle的正则表达式中排除一个单词?

Javascript使用数组中的值替换字符串中的字符串

Python:删除数据框中除 > < 之间的信息之外的所有字符串