Javascript.RU

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

Заменить все символы после 5-го на звездочки
Нужно заменять в словах символы после 5-го на звездочки

Не путайте Яндекс.Деньги с Гоголь-Моголем
Не путай** Яндек*.Деньг* с Гогол*-Могол**

Как это сделать проще?
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2015, 13:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Shitbox2,
str.replace
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2015, 13:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Shitbox2,
var str = "Не путайте Яндекс.Деньги с Гоголь-Моголем";
str = str.replace(/([-\s.]?\S{5})(\S+?)(?=[-\s.]|$)/g, function(a, b, c) {
    return b + c.replace(/./g, "*")
})
alert(str)
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2015, 14:26
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

рони, хороший вариант. Но это первое, что приходит в голову :-) Не читаем, да и работает не быстро.

Придумал такой, но захардкоженная строка с 30 звездочками не очень нравится.

var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем';

str = str.replace(/[\wа-яёА-ЯЁ]+/g, function(word) {  
    return word.substring(0, 5) + '******************************'.substring(0, word.length - 5);
})
alert(str);
Ответить с цитированием
  #5 (permalink)  
Старый 01.06.2015, 14:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

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);
Ответить с цитированием
  #6 (permalink)  
Старый 01.06.2015, 15:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

зависит от того, что словом считать
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);
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #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)
Ответить с цитированием
  #8 (permalink)  
Старый 01.06.2015, 19:07
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 09.05.2015
Сообщений: 27

Ну для начала нужно разбить текст на слова. Хорошая регулярках в исходниках редактора Sublime Text

// Characters that are considered to separate words
    "word_separators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?",


Конечно она не учитывает специфические знаки пунктуации типа "¿¡"

Но там по-ходу перечислены тупо все символы пунктуации на клаве:

var wordsSplitRe = /[\s`~!@#$%^&*()-_+=|\\[\]{};:"',<.>?\/]+/;
'*уй *изда джигурда'.split(wordsSplitRe); // ["", "уй", "изда", "джигурда"]


А затем отдельные слова обрабатываем

Последний раз редактировалось sexbot, 01.06.2015 в 19:09.
Ответить с цитированием
  #9 (permalink)  
Старый 01.06.2015, 19:07
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 09.05.2015
Сообщений: 27

var str = 'Не путайте Яндекс.Деньги с Гоголь-Моголем';

str = str.replace(/[^\s`~!@#$%^&*()-_+=|\\[\]{};:"',<.>?\/]+/g, function(word) {
    var len = word.length - 5;
    return word.substring(0, 5) + (len > 0 ? Array(++len).join('*') : '');
})

"Не путай** Яндек*.Деньг* с Гогол*-Могол**"

Последний раз редактировалось sexbot, 01.06.2015 в 19:15.
Ответить с цитированием
  #10 (permalink)  
Старый 01.06.2015, 22:06
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от sexbot
/[^\s`~!@#$%^&*()-_+=|\\[\]{};:"',<.>?\/]+/g
Это почти то же самое, что
/[\wа-яё]+/gi


вот так можно
alert(
 'Не путайте Яндекс.Деньги с Гоголь-Моголем'
  .replace(/[\wа-яё]+/gi, function(word){
    return word.substring(0, 5)+word.substring(5).replace(/./g, "*")})
)

А нижний пробел обычно входит в число обычных символов.

Последний раз редактировалось indeterm, 01.06.2015 в 22:26.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по replace. Как заменить все точки в строке? Pluto Общие вопросы Javascript 14 21.04.2017 12:32
Русские символы показываются каракулями после отправки AndreyT AJAX и COMET 19 04.06.2010 18:54
Выполняется функция, а все что написано после нее игнорируется, libinstyle Элементы интерфейса 4 24.03.2010 16:44
Заменить символы в строке artlayers jQuery 5 17.03.2010 18:54
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37