我有这个字符串:
hello world hello world hello world hello
我需要得到以下内容:
hello world hello hello hello
如果我使用:
str = str.replace('world', '');
它只删除上面字符串中第一次出现的world
。
如何替换除第一个之外的所有匹配项?
答案 0 :(得分:12)
您可以将函数传递给String#replace,您可以在其中指定省略替换第一个匹配项。还要将替换的第一个参数设置为匹配所有匹配项。
<强>演示强>
let str = 'hello world hello world hello world hello',
i = 0;
str = str.replace(/world/g, m => !i++ ? m : '');
console.log(str);
注意强>
您可以使用IIFE:
来避免使用全局计数器变量i
let str = 'hello world hello world hello world hello';
str = str.replace(/world/g, (i => m => !i++ ? m : '')(0));
console.log(str);
答案 1 :(得分:2)
为了提供@Kristianmitk优秀答案的替代方案,我们可以使用正面的后视,Node.Js&amp; Chrome&gt; = 62
const string = 'hello world hello world hello world hello';
console.log(
string.replace(/(?<=world[\s\S]+)world/g, '')
);
// or
console.log(
string.replace(/(?<=(world)[\s\S]+)\1/g, '')
);
&#13;
使用Symbol.replace众所周知的符号。
Symbol.replace众所周知的符号指定了该方法 替换字符串的匹配子串。这个函数被调用 String.prototype.replace()方法。
const string = 'hello world hello world hello world hello';
class ReplaceButFirst {
constructor(word, replace = '') {
this.count = 0;
this.replace = replace;
this.pattern = new RegExp(word, 'g');
}
[Symbol.replace](str) {
return str.replace(this.pattern, m => !this.count++ ? m : this.replace);
}
}
console.log(
string.replace(new ReplaceButFirst('world'))
);
&#13;
答案 2 :(得分:1)
在我的解决方案中,我用当前时间戳替换第一个匹配项,然后替换所有匹配项,最后用world
替换时间戳
您也可以使用str.split('world')
然后加入
var str = 'hello world hello world hello world hello';
var strs = str.split('world');
str = strs[0] + 'world' + strs.slice(1).join('');
console.log(str);
var str = 'hello world hello world hello world hello';
const d = Date.now()
str = str.replace('world', d).replace(/world/gi, '').replace(d, 'world');
console.log(str);
&#13;
答案 3 :(得分:1)
var str = 'hello world hello world hello world hello';
var count = 0;
var result = str.replace(/world/gi, function (x) {
if(count == 0) {
count++;
return x;
} else {
return '';
}
});
console.log(result);
答案 4 :(得分:0)
我会这样做:
function replaceExceptFirst(str, search) {
let index = str.indexOf(search);
return str.substring(0, index + search.length) +
str.substring(index + search.length).replace(/world/g, '')
}
console.log(replaceExceptFirst('hello world hello world world hello', 'world'))