Замена случайных пробелов на строку
Добрый день любители и знатоки 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>тела т.е. случайно менять количество и расположение строки замены? может кто-нить может помочь? |
ну подсчитай число пробелов в строке.. потом на основании этого числа поставь рандом , как и на количество пробелов, так и на их расположение.. а потом простая замена, на основании данных рандома.
|
Цитата:
Я не понимаю как можно заменить 3 и 5 пробелы... Все пробелы без проблем... а вот конкретные... |
Работа со строками
функция рандом Испытайте свои знания в освоении новых тем в JS, а если не получится, выложите то, что у вас не получается. |
Решил вопрос написав 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 Спасибо за настояние :) |
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])
|
Понравилась задача, решил поразмяться
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(' ');
}
|
Цитата:
Я <a href="#">cool</a> люблю Москву всеми частями своего <a href="#">cool</a> тела Пробелы нужно менять, а не вставлять в разные места означеный тег... ;) |
ksa,
Ну, как "увидел" задачу, так и решил. Получил немного удовольствия, потому что хотел сделать отдельной функцией с настраиваемым количеством замен и без "если с первого раза не прокатило, повторяем". Теоретически (с очень-очень низкой вероятностью, но все же) эти повторы могут повесть браузер на какое-то время. Как-то некошерно это ;) |
Цитата:
|
| Часовой пояс GMT +3, время: 10:16. |