Показать сообщение отдельно
  #7 (permalink)  
Старый 01.06.2015, 16:37
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Больше нравится вариант с разделением на слова, т.к. позволяет разнести логику. Одна часть делит предложение, другая — обрабатывает слова. Напрягает только проверка 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)
Ответить с цитированием