 
			
				01.06.2015, 13:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.10.2010 
					
					
					
						Сообщений: 571
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Заменить все символы после 5-го на звездочки
			 
			
		
		
		
		Нужно заменять в словах символы после 5-го на звездочки 
Не путайте Яндекс.Деньги с Гоголь-Моголем
Не путай** Яндек*.Деньг* с Гогол*-Могол**
 
Как это сделать проще?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 13:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Shitbox2,
    str.replace  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 13:50
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Shitbox2,
  
var str = "Не путайте Яндекс.Деньги с Гоголь-Моголем";
str = str.replace(/([-\s.]?\S{5})(\S+?)(?=[-\s.]|$)/g, function(a, b, c) {
    return b + c.replace(/./g, "*")
})
alert(str)
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 14:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 14:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 15:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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);
 
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 16:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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)
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 19:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 19:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.06.2015, 22:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |