Замена случайных пробелов на строку
Добрый день любители и знатоки 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, время: 04:58. |