删除字符串javascript中n次出现的感叹号

时间:2018-12-26 12:41:14

标签: javascript ecmascript-6

我想知道是否有人知道如何替换n字符串中出现感叹号的次数。我需要从左到右删除句子中的n感叹号,而n始终是正整数。

一个例子如下:

remove("Hi!!!",1) === "Hi!!"
remove("!!!Hi !!hi!!! !hi",3) === "Hi !!hi!!! !hi"

我尝试了许多方法,但是到目前为止还没有运气。这是我最近的尝试。

function remove(str, n){
   str.replace(/!{n}/g, '');
}

3 个答案:

答案 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");