替换第 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, ":"));
在此示例字符串 '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, ":"));