Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2013, 20:37
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Что не так с регуляркой?
Доброго времени суток!

Простенькая задачка, нужно менять слова в предложении которые находятся в {} и разделены |

Но я не врубаюсь, что не так с регуляркой? почему {} запоминаются?
<!DOCTYPE html>

<html>
<head>
    <title></title>
    <meta charset="utf8">
</head>

<body>
<script>
    
    
    
    
    function init() {
    var text =  "Я {самый|очень|плохой|доктор|кролик из статей про наследование и}  сантехник, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно}",

        reg = /(?:\{).*?\|.*?\|?(?:\})/g,
        arrReplace = [], randOut = [],
        search = text.match(reg),
        input = document.getElementById('text');
        
        for (var i = 0; i < search.length; i++) {
        
            arrReplace[i] = search[i];
            arrReplace[i] = arrReplace[i].split('|');
            randOut[i] = arrReplace[i][Math.floor(Math.random()*(arrReplace[i].length))];
            text = text.replace(search[i], randOut[i]);
            
        }
        input.innerHTML = text;
    }
    window.onload = init;



    
    
</script>
<div id="text"></div>

</body>
</html>
__________________
Научу себя плохому
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2013, 20:54
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

я нихуя не понял
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2013, 20:57
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
я нихуя не понял
В задачке или в моем скоростном говнокоде?))

Дан текст:

Я {самый|очень|плохой|доктор| кролик из статей про наследование} сантехник, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно}

нужно взять слова, разделенные | из {}, и рэндомно подставить одно из них вместо {}


Я ищю такие конструкции с помощью регулярки
/(?:\{).*?\|.*?\|?(?:\})/g

и не понимаю почему { и } записываются в массив результатов, я ж юзаю (?:\{)
__________________
Научу себя плохому

Последний раз редактировалось l-liava-l, 07.07.2013 в 21:01.
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2013, 21:04
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

лол ща сделаю) после парсинга говносинтаксиса придуманного мной я в регулярках батька)
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2013, 21:12
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

var text = 'Я {самый|очень} плохой {доктор|кролик|сантехник} из статей про наследование, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно}';


  var newText = text.replace(/\{(.+?)\}/img, function(tab, inTag) {
    var words = inTag.split('|');
    var random = Math.round(Math.random() * (words.length - 1));

    return words[random];
  });

  alert(newText);


Ты имел ложное убеждение что все задание нужно решать регуляркой, тебя запутали).
Всю задачу нужно разбивать на куски, которые можно опсиать математикой ну или чем там) так и тут, НЕ НУЖНО стараться сделать все одним куском, НУЖНО стараться разбивать на куски)

1) выдрать из тегов текст
2) разделить его по разделителю
3) выдрать случайное слово из того что разделили
4) вставить это слово за место тега

И нужно уметь видеть эти куски.

НЕ НУЖНО БОЯТЬСЯ ЧТО КОМП БУДЕТ ТУПИТЬ ОТ КОЛИЧЕСТВА ЭТИХ КУСКОВ))) это МИФ

Последний раз редактировалось iKillMaxmaxmaximus, 07.07.2013 в 21:18.
Ответить с цитированием
  #6 (permalink)  
Старый 07.07.2013, 21:17
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Оу, точняк, благодарю)
__________________
Научу себя плохому
Ответить с цитированием
  #7 (permalink)  
Старый 07.07.2013, 21:17
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

апдейт сделал, прочитай, и в карму плюсуй)
Ответить с цитированием
  #8 (permalink)  
Старый 07.07.2013, 21:19
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
апдейт сделал, прочитай, и в карму плюсуй)
Онииии не дааают плюсоваать))
__________________
Научу себя плохому
Ответить с цитированием
  #9 (permalink)  
Старый 07.07.2013, 21:22
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

но мне нужно больше плюсов( нужно боооольше плюсов..
Ответить с цитированием
  #10 (permalink)  
Старый 07.07.2013, 21:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Блин, пока ходил котов из-под окна кирпичами гонять вы тут уже порешали все. На всякий случай пощу свой вариант, который кажется что-то напоминает
var str = 'Я {самый|очень|плохой|доктор|кролик из статей про наследование и}  сантехник, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно}';

str = str.replace(/{(.*?)}/gm, function(match, capture) {
    var options = capture.split('|');
    return options[Math.floor(Math.random()*options.length)];
});
alert(str);

Последний раз редактировалось danik.js, 07.07.2013 в 21:27.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
Извините что создаю еще одну тему, но мне нужна помощь и ваше мнение megaupload Оффтопик 11 27.05.2013 12:58
Посоветуйте новику, что я делаю не так danil-n2 Общие вопросы Javascript 5 26.04.2013 21:22
Странно, что не так? Mukhtar Events/DOM/Window 6 08.03.2013 05:24
Поюзайте хомячка Nanto Ваши сайты и скрипты 30 06.06.2011 22:16