12.11.2013, 16:45
|
Новичок на форуме
|
|
Регистрация: 26.08.2011
Сообщений: 8
|
|
Замена случайных пробелов на строку
Добрый день любители и знатоки JS.
Не могу сообразить никак, как бы сделать одну фичу:
есть строка:
var s = 'Я люблю Москву всеми частями своего тела';
и есть строка замены
var p = '<a href="#"> cool </a>';
как можно заменить 2-3 случайных пробела в строке, что бы на выходе получить:
Я люблю<a href="#"> cool </a>Москву всеми частями<a href="#"> cool </a>своего тела
а при следующей перезагрузки страницы
Я<a href="#"> cool </a>люблю Москву<a href="#"> cool </a>всеми частями своего<a href="#"> cool </a>тела
т.е. случайно менять количество и расположение строки замены?
может кто-нить может помочь?
|
|
12.11.2013, 16:50
|
Профессор
|
|
Регистрация: 16.04.2012
Сообщений: 310
|
|
ну подсчитай число пробелов в строке.. потом на основании этого числа поставь рандом , как и на количество пробелов, так и на их расположение.. а потом простая замена, на основании данных рандома.
|
|
12.11.2013, 16:57
|
Новичок на форуме
|
|
Регистрация: 26.08.2011
Сообщений: 8
|
|
Сообщение от Faab
|
ну подсчитай число пробелов в строке.. потом на основании этого числа поставь рандом , как и на количество пробелов, так и на их расположение.. а потом простая замена, на основании данных рандома.
|
Да, было бы все так просто... я как-то не очень силен в JS...
Я не понимаю как можно заменить 3 и 5 пробелы...
Все пробелы без проблем... а вот конкретные...
|
|
12.11.2013, 17:05
|
Профессор
|
|
Регистрация: 16.04.2012
Сообщений: 310
|
|
Работа со строками
функция рандом
Испытайте свои знания в освоении новых тем в JS, а если не получится, выложите то, что у вас не получается.
Последний раз редактировалось Faab, 12.11.2013 в 17:08.
|
|
12.11.2013, 18:37
|
Новичок на форуме
|
|
Регистрация: 26.08.2011
Сообщений: 8
|
|
Решил вопрос написав 2 функции
function replaceTXT(){
var t = $('#content').html(), // выбираем html c текстом
s = t.split(/[,]/g), // разбиваем на массив (в моем случае с каждой запятой ",")
v = gen_rand(s.length), // отправляем количество элементов массива в ф-ю, которая вернет массив с номерами элементов, которые надо обработать
txt = '<a href="#">Добавляемый текст</a> '; // строка которая будет добавляться
for(var i = 0; i < v.length; i++){ // перебираем массив который нам сгенерировала ф-я gen_rand
s[v[i]] = txt + s[v[i]]; // добавляем в нужном элементе строку
}
s = s.join(); // воссоздаем html код обратно
$('#content').html(s); // выводим код
}
function gen_rand(r){
var z = 10, // максимально возможное кол-во элементов в создаваемом массиве
d = r % Math.ceil(Math.random()*z); // генерируем случайное кол-во элементов
if (d < 1){ // если с первого раза не прокатило, повторяем
gen_rand(r);
return;
}else{
var arr = new Array();
for (var i=0; i <= d; i++)
arr[i] = Math.floor(Math.random()*r); // создаем массив со случайными индексами основного массива
}
return arr;
}
Faab Спасибо за настояние
Последний раз редактировалось BelOFF, 12.11.2013 в 18:39.
|
|
13.11.2013, 00:44
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
var s = 'Я люблю Москву всеми частями своего тела';
var arr = s.split(/\s+/g),lng = arr.length;
var n = Math.floor(Math.random() *3+1);//число заменяемых пробелов;max = 3
var arr2=[];
function rand(n) {
if(n<=0)return;
var a= Math.floor(Math.random() *(lng-1));
if(('='+arr2.join('=')+'=').indexOf('='+a+'=')!=-1){rand(n);return} //если номер пробела есть уже в списке выбор повторяем;
arr2.push(a);
--n;
rand(n);
} rand(n);
var s2='', tstStr = '='+arr2.join('=')+'=';
for (var i=0; i<lng; i++){
var d = ' '; if(tstStr.indexOf('='+(i-1)+'=')!=-1) d = '<a href="#"> cool </a>';
s2+=d + arr[i];
}
alert(['arr2='+arr2,'\n'+s2])
Хотя можно упростить, опустив пункт задания числа заменяемых пробелов;(их число будет меняться за счет случайного совпадений индексов)
var s = 'Я люблю Москву всеми частями своего тела';
var arr = s.split(/\s+/g),lng = arr.length;
var arr2=[];
function rand(n) {
if(n<=0)return;
var a= Math.floor(Math.random() *(lng-1));
arr2.push(a);
--n;
rand(n);
} rand(3); //max = 3
var s2='', tstStr = '='+arr2.join('=')+'=';
for (var i=0; i<lng; i++){
var d = ' '; if(tstStr.indexOf('='+(i-1)+'=')!=-1)d = '<a href="#"> cool </a>';
s2+=d + arr[i];
}
alert(['arr2='+arr2,'\n'+s2])
Последний раз редактировалось Deff, 13.11.2013 в 04:29.
|
|
13.11.2013, 01:31
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Понравилась задача, решил поразмяться
var str = 'Я люблю Москву всеми частями своего тела';
var repeat = 10;
while(repeat--) console.log(getAdw(str, 2));
function getAdw(str, match) {
str = str.split(' ');
var arr = [];
for (var i = 0; i < str.length ; i++) arr[i] = i;
while(match--) str[arr.splice(Math.floor(Math.random() * (arr.length -1)), 1)] += ' <a href="#">cool</a>';
return str.join(' ');
}
|
|
13.11.2013, 08:52
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от BETEPAH
|
решил поразмяться
|
Результат твоей разминки
Я <a href="#">cool</a> люблю Москву всеми частями своего <a href="#">cool</a> тела
Пробелы нужно менять, а не вставлять в разные места означеный тег...
|
|
13.11.2013, 10:19
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
ksa,
Ну, как "увидел" задачу, так и решил. Получил немного удовольствия, потому что хотел сделать отдельной функцией с настраиваемым количеством замен и без "если с первого раза не прокатило, повторяем". Теоретически (с очень-очень низкой вероятностью, но все же) эти повторы могут повесть браузер на какое-то время. Как-то некошерно это
|
|
13.11.2013, 13:57
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от ksa
|
Пробелы нужно менять, а не вставлять в разные места означеный тег...
|
Ну по идее вставка <a href="#"> cool</a> (один пробел перед cool) приводит к тому же видимому результату, что и замена пробела на авторский тег с <a href="#"> cool </a> двумя пробелами
|
|
|
|