Что не так с регуляркой?
Доброго времени суток!
Простенькая задачка, нужно менять слова в предложении которые находятся в {} и разделены | Но я не врубаюсь, что не так с регуляркой? почему {} запоминаются? <!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> |
я нихуя не понял
|
Цитата:
Дан текст: Я {самый|очень|плохой|доктор| кролик из статей про наследование} сантехник, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно} нужно взять слова, разделенные | из {}, и рэндомно подставить одно из них вместо {} Я ищю такие конструкции с помощью регулярки /(?:\{).*?\|.*?\|?(?:\})/g и не понимаю почему { и } записываются в массив результатов, я ж юзаю (?:\{) |
лол ща сделаю) после парсинга говносинтаксиса придуманного мной я в регулярках батька)
|
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) вставить это слово за место тега И нужно уметь видеть эти куски. НЕ НУЖНО БОЯТЬСЯ ЧТО КОМП БУДЕТ ТУПИТЬ ОТ КОЛИЧЕСТВА ЭТИХ КУСКОВ))) это МИФ |
Оу, точняк, благодарю)
|
апдейт сделал, прочитай, и в карму плюсуй)
|
Цитата:
|
но мне нужно больше плюсов( нужно боооольше плюсов..
|
Блин, пока ходил котов из-под окна кирпичами гонять вы тут уже порешали все. На всякий случай пощу свой вариант, который кажется что-то напоминает :)
var str = 'Я {самый|очень|плохой|доктор|кролик из статей про наследование и} сантехник, которому не составит труда {написать|сварганить| запостить} код для этого задания, в котором слова будут изменяться {быстро|мгновенно|рэндомно}'; str = str.replace(/{(.*?)}/gm, function(match, capture) { var options = capture.split('|'); return options[Math.floor(Math.random()*options.length)]; }); alert(str); |
Часовой пояс GMT +3, время: 01:13. |