Я немного застрял на этом, не могу понять, как повторно вставить символы, отличные от слов, т.е. "-" а также "!". Я использовал 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(" ");
}
Ваш код может быть намного проще, если вы будете использовать возможность передать функцию в 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"));
i
после g
модификатора регулярного выражения. Или используйте \w
. Еще одна версия с использованием групп: str.replace(/(\w)(\w{2,})(\w)/g, (_, a, b, c) => a + b.length + c);
delim=string.split(originalWord)[1]
для слов с разделителями (например, не последнее слово или дубликат)" "
вместо/\W/
что означает несловарные символы.