Заменить все символы после 5-го на звездочки
Нужно заменять в словах символы после 5-го на звездочки
Не путайте Яндекс.Деньги с Гоголь-Моголем Не путай** Яндек*.Деньг* с Гогол*-Могол** Как это сделать проще? |
Shitbox2,
:) str.replace |
Shitbox2,
var str = "Не путайте Яндекс.Деньги с Гоголь-Моголем"; str = str.replace(/([-\s.]?\S{5})(\S+?)(?=[-\s.]|$)/g, function(a, b, c) { return b + c.replace(/./g, "*") }) alert(str) |
рони, хороший вариант. Но это первое, что приходит в голову :-) Не читаем, да и работает не быстро.
Придумал такой, но захардкоженная строка с 30 звездочками не очень нравится. var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; str = str.replace(/[\wа-яёА-ЯЁ]+/g, function(word) { return word.substring(0, 5) + '******************************'.substring(0, word.length - 5); }) alert(str); |
Shitbox2,
var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; str = str.replace(/[\wа-яёА-ЯЁ]+/g, function(word) { var len = word.length - 5; return word.substring(0, 5) + (len > 0 ? (new Array(len+1)).join('*') : '') ; }) alert(str); |
зависит от того, что словом считать
var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; str = str.replace(/[^-.\s]{5}([^-.\s]+)/g, function(word) { return word.slice(0, 5) + new Array(word.length - 4).join('*'); }) alert(str); var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; str = str.replace(/([^-.\s]{5})([^-.\s]+)/g, function(word, found1, found2) { return found1 + new Array(found2.length + 1).join('*'); }) alert(str); |
Больше нравится вариант с разделением на слова, т.к. позволяет разнести логику. Одна часть делит предложение, другая — обрабатывает слова. Напрягает только проверка len > 0 ? ..., но от нее, наверное, никуда не деться.
function asteriskify(word, letters, type) { type = type || '*'; var asteriskesNumber = word.length - Math.abs(letters); var asteriskes = (asteriskesNumber > 0 ? (new Array(asteriskesNumber + 1)).join(type) : ''); if (letters > 0) { return word.substring(0, letters) + asteriskes; } else { return asteriskes + word.substring(word.length + letters, word.length) } } var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; var REGEXP = /[\wа-яёА-ЯЁ]+/g; var out1 = str.replace(REGEXP, function(word) { return asteriskify(word, 5); }) var out2 = str.replace(REGEXP, function(word) { return asteriskify(word, -4); }) alert(out1 +'\n'+ out2) |
Ну для начала нужно разбить текст на слова. Хорошая регулярках в исходниках редактора Sublime Text
// Characters that are considered to separate words "word_separators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?", Конечно она не учитывает специфические знаки пунктуации типа "¿¡" Но там по-ходу перечислены тупо все символы пунктуации на клаве: var wordsSplitRe = /[\s`~!@#$%^&*()-_+=|\\[\]{};:"',<.>?\/]+/; '*уй *изда джигурда'.split(wordsSplitRe); // ["", "уй", "изда", "джигурда"] А затем отдельные слова обрабатываем |
var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем'; str = str.replace(/[^\s`~!@#$%^&*()-_+=|\\[\]{};:"',<.>?\/]+/g, function(word) { var len = word.length - 5; return word.substring(0, 5) + (len > 0 ? Array(++len).join('*') : ''); }) "Не путай** Яндек*.Деньг* с Гогол*-Могол**" |
Цитата:
/[\wа-яё]+/gi вот так можно alert( 'Не путайте Яндекс.Деньги с Гоголь-Моголем' .replace(/[\wа-яё]+/gi, function(word){ return word.substring(0, 5)+word.substring(5).replace(/./g, "*")}) ) А нижний пробел обычно входит в число обычных символов. |
Часовой пояс GMT +3, время: 06:06. |