удалить n вхождений восклицательных знаков в строке JavaScript - PullRequest
0 голосов
/ 26 декабря 2018

Мне интересно, знает ли кто-нибудь, как заменить 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 голосов
/ 26 декабря 2018

Вы можете использовать функцию replacer в .replace() для замены только первого числа элементов до переданного значения 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"
0 голосов
/ 26 декабря 2018

Вы можете считать счетчик и проверить, достигнет ли он нуля.если не уменьшать и заменить пустой строкой, в противном случае заменить найденной строкой.

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");
0 голосов
/ 26 декабря 2018

Идея: сопоставить / заменить все восклицательные знаки, но поставить отметку 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 больше, чем число ! во входной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...