Регуляторы Regex вновь введены в эксплуатацию

1

Я немного застрял на этом, не могу понять, как повторно вставить символы, отличные от слов, т.е. "-" а также "!". Я использовал regex как способ разделения на основе этих разделителей, но мне нужно сохранить индексы "-" и "!". и повторно вводить, как только я преобразую его обратно в строку из массива. Желаемый результат: "e6t-r3s r4y fun!" и до сих пор я получаю: "e6t r3s r4y fun"

Напишите функцию, которая берет строку и превращает все и все "слова" (см. Ниже) в пределах этой строки длиной 4 или выше в аббревиатуру, следуя тем же правилам.

аббревиатура ("катание на слонах - это действительно весело!");

function abbreviate(string) {
    var array = string.split(/\W/); 
    var newArray = [];
    for (var i = 0; i < array.length; i++) {//iterates through each word
      var word = array[i];
      var abbrString = "";
      if (word.length >= 4) {
          //concat first index,count of indexes in between, last index
          var innerChar = word.substring(1, word.length - 1);
          var indCount = innerChar.length;
          var abbrWord = word.charAt(0) + indCount + word.charAt(word.length-1); 
          newArray.push(abbrWord);
        } else {
          newArray.push(word);
        }

    }
  return newArray.join(" ");
}
  • 0
    Как насчет delim=string.split(originalWord)[1] для слов с разделителями (например, не последнее слово или дубликат)
  • 0
    В конце вы делаете соединение одним пробелом. Тогда имеет смысл также разделить на " " вместо /\W/ что означает несловарные символы.
Теги:

1 ответ

1

Ваш код может быть намного проще, если вы будете использовать возможность передать функцию в String.replace():

function abbreviate(str) {
    return str.replace(/[a-z]{4,}/ig, function (word) {
        return word[0] + (word.length - 2) + word[word.length - 1];
    })
}

console.log(abbreviate("elephant-rides are really fun!"));
console.log(abbreviate("Accessibility"));
  • 0
    Оценил! Я новичок в этом, и, похоже, постараюсь понять ваш код ... хотя он не соответствует одной из спецификаций «Доступность» - ожидается: «A11y», вместо этого получил: «Ac10y»
  • 0
    @chyltse. Вы можете добавить модификатор i после g модификатора регулярного выражения. Или используйте \w . Еще одна версия с использованием групп: str.replace(/(\w)(\w{2,})(\w)/g, (_, a, b, c) => a + b.length + c);
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню