01.06.2015, 13:21
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Заменить все символы после 5-го на звездочки
Нужно заменять в словах символы после 5-го на звездочки
Не путайте Яндекс.Деньги с Гоголь-Моголем
Не путай** Яндек*.Деньг* с Гогол*-Могол**
Как это сделать проще?
|
|
01.06.2015, 13:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Shitbox2,
str.replace
|
|
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)
|
|
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,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);
|
|
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.
|
|
|
|