我想知道是否有人知道如何替换n
字符串中出现感叹号的次数。我需要从左到右删除句子中的n
感叹号,而n
始终是正整数。
一个例子如下:
remove("Hi!!!",1) === "Hi!!"
remove("!!!Hi !!hi!!! !hi",3) === "Hi !!hi!!! !hi"
我尝试了许多方法,但是到目前为止还没有运气。这是我最近的尝试。
function remove(str, n){
str.replace(/!{n}/g, '');
}
答案 0 :(得分:1)
想法:匹配/替换所有感叹号,但在替换函数中检查n
,并有条件地返回空字符串(删除!
)或原始字符串(保留!
)
此外,每次将n
替换为空时,递减!
。
function remove(str, n) {
return str.replace(/!/g, function (m0) {
if (n > 0) {
n--;
return '';
}
return m0;
});
}
console.log(remove("Hi!!!",1));
console.log(remove("!!!Hi !!hi!!! !hi",3));
如果n
大于输入字符串中的!
的数量,此算法将删除所有感叹号。
答案 1 :(得分:1)
您可以使用.replace()
中的replacer函数来替换仅第一个数量的项目,直到达到num
的传递值:
const remove = function(str, n) {
let i = 0;
const res = str.replace(/!/g, match => i++ < n ? '' : match); // if i is smaller than the num, replace it with nothing (ie remove it) else, when i becomes greater, leave the current matched item in the string and don't remove it
return res;
}
console.log(remove("Hi!!!", 1)); // === "Hi!!"
console.log(remove("!!!Hi !!hi!!! !hi", 3)) // === "Hi !!hi!!! !hi"
或者,如果您愿意,可以选择单线:
const remove = (str, n) => str.replace(/!/g, match => n-- > 0 ? '' : match);
// Results:
console.log(remove("Hi!!!", 1)); // === "Hi!!"
console.log(remove("!!!Hi !!hi!!! !hi", 3)) // === "Hi !!hi!!! !hi"
答案 2 :(得分:1)
您可以将计数作为计数器并检查ich它是否达到零。如果不减量,则替换为空字符串,否则替换为找到的字符串。
const remove = (s, n) => s.replace(/\!/g, _ => n && n-- ? '' : _);
console.log(remove("Hi!!!", 1) === "Hi!!");
console.log(remove("!!!Hi !!hi!!! !hi", 3) === "Hi !!hi!!! !hi");