Генерация текста с помощью разделителей
Народ, нужна помощь по скрипту срочно!
Есть 2 текстовых поля textarea. В первое вводятся предложения построчно. Если внутри предложения встречается разделитель, то должно получится 2 новых варианта: первый со словом слева от символа разделителя, второй - со словом после. Никак не могу понять как осуществить данный алгоритм, может кто-то знает решение? Получилось сделать только с одной меткой, т.е. вышло 2 варианта из одного. Пример: Из Стоимость товаров||услуг на нашем сайте. Получил Стоимость товаров на нашем сайте Стоимость услуг на нашем сайте Если же || встречается еще и где-то в другой части предложения, получается какой-то бред. Вобще не могу понять как это сделать, какая логика тут заработает? Вот функции которые обрабатывают текст. function generate() { to.value=""; var txt=from.value; var strings=txt.split(/<br>|\r?\n/); var p="(?:\\(([^\\)]*)\\)|([^\\s]+))"; var pat=new RegExp(p+"\\|\\|"+p,"g"); var gen_str=[]; function find(str) { var strings=str; var replaces={}; for(var i=0;i<strings.length;i++) { var parts=strings[i].match(pat); if(parts!==null && parts!==undefined) { var string=strings[i]; for(var k=0;k<parts.length;k++) { var splited=parts[k].split('||'); if(splited!==undefined && splited!==null) { replaces[parts[k]]=[i,k,splited]; } } } else gen_str.push(strings[i]); } return replaces; } ... |
сначала делить строки split("\r\n");
потом полученный массив прогонят в цикле и делить строки split("||"); |
Внезапно: вам нужна рекурсия.)
|
Ну это понятно. А что дальше делать с этими кусками?) Рекурсия используется, но работает не правильно. Хотя... нет не используется. Точно). Понял. Спасибо.)
|
И так не получается. Вылетает ошибка too much recursion.
Вот код: function generate() { to.value=""; var txt=from.value; var strings=txt.split(/<br>|\r?\n/); //var str=""; var p="(?:\\(([^\\)]*)\\)|([^\\s]+))"; var pat=new RegExp(p+"\\|\\|"+p,"g"); var gen_str=[]; function find(str) { var strings=str; for(var i=0;i<strings.length;i++) { var parts=strings[i].match(pat); if(parts!==null && parts!==undefined) { var string=strings[i]; var replaces=[]; for(var k=0;k<parts.length;k++) { var splited=parts[k].split('||'); if(splited!==undefined && splited!==null) { replaces[k]=splited; } } strings[i]=rep_(strings[i],replaces).join('\n'); } else gen_str.push(strings[i]); } return strings; } function rep_(str,rep) { var str=str; var rep=rep; var stroki=[]; for(var z=0;z<rep.length;z++) { var splited=rep[z]; var spl=splited.join('||'); for(var s=0;s<splited.length;s++) { var this_rep=str.replace(spl,splited[s]); if(this_rep!==undefined && this_rep.indexOf('||')!==-1) { this_rep=rep_(this_rep,rep).join('\n'); } stroki[stroki.length]=this_rep; } } return stroki; } |
А если использовать рекурсию в функции find получаю "Сценарий не отвечает"!
|
Всё. Уже сделал, хоть и по-деревенски))). В общем работает.
|
Часовой пояс GMT +3, время: 05:58. |