Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.11.2013, 16:45
Новичок на форуме
Отправить личное сообщение для BelOFF Посмотреть профиль Найти все сообщения от BelOFF
 
Регистрация: 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>тела


т.е. случайно менять количество и расположение строки замены?

может кто-нить может помочь?
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2013, 16:50
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

ну подсчитай число пробелов в строке.. потом на основании этого числа поставь рандом , как и на количество пробелов, так и на их расположение.. а потом простая замена, на основании данных рандома.
Ответить с цитированием
  #3 (permalink)  
Старый 12.11.2013, 16:57
Новичок на форуме
Отправить личное сообщение для BelOFF Посмотреть профиль Найти все сообщения от BelOFF
 
Регистрация: 26.08.2011
Сообщений: 8

Сообщение от Faab Посмотреть сообщение
ну подсчитай число пробелов в строке.. потом на основании этого числа поставь рандом , как и на количество пробелов, так и на их расположение.. а потом простая замена, на основании данных рандома.
Да, было бы все так просто... я как-то не очень силен в JS...
Я не понимаю как можно заменить 3 и 5 пробелы...
Все пробелы без проблем... а вот конкретные...
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2013, 17:05
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Работа со строками

функция рандом

Испытайте свои знания в освоении новых тем в JS, а если не получится, выложите то, что у вас не получается.

Последний раз редактировалось Faab, 12.11.2013 в 17:08.
Ответить с цитированием
  #5 (permalink)  
Старый 12.11.2013, 18:37
Новичок на форуме
Отправить личное сообщение для BelOFF Посмотреть профиль Найти все сообщения от BelOFF
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2013, 00:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2013, 01:31
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 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(' ');
}
Ответить с цитированием
  #8 (permalink)  
Старый 13.11.2013, 08:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от BETEPAH
решил поразмяться
Результат твоей разминки
Я <a href="#">cool</a> люблю Москву всеми частями своего <a href="#">cool</a> тела

Пробелы нужно менять, а не вставлять в разные места означеный тег...
Ответить с цитированием
  #9 (permalink)  
Старый 13.11.2013, 10:19
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

ksa,
Ну, как "увидел" задачу, так и решил. Получил немного удовольствия, потому что хотел сделать отдельной функцией с настраиваемым количеством замен и без "если с первого раза не прокатило, повторяем". Теоретически (с очень-очень низкой вероятностью, но все же) эти повторы могут повесть браузер на какое-то время. Как-то некошерно это
Ответить с цитированием
  #10 (permalink)  
Старый 13.11.2013, 13:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от ksa
Пробелы нужно менять, а не вставлять в разные места означеный тег...
Ну по идее вставка <a href="#"> cool</a> (один пробел перед cool) приводит к тому же видимому результату, что и замена пробела на авторский тег с <a href="#"> cool </a> двумя пробелами
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставить значение переменных в строку someone Общие вопросы Javascript 2 03.11.2013 00:14
Как разрезать строку по символу-метке? allanmiln Общие вопросы Javascript 4 10.04.2013 20:09
Chome 18.0.1025.142 Prompt() возвращает NULL как строку alexben Opera, Safari и др. 10 07.04.2012 16:33
Нужно удалить строку в таблице. Раиль Элементы интерфейса 2 16.12.2010 15:58
по ctrl+Enter перенос курсора на след. строку Crux Internet Explorer 5 09.08.2010 15:30