Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2012, 13:32
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 11.10.2011
Сообщений: 17

Генерация текста с помощью разделителей
Народ, нужна помощь по скрипту срочно!

Есть 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;
	}
...

Последний раз редактировалось a1exei, 19.05.2012 в 13:35.
Ответить с цитированием
  #2 (permalink)  
Старый 20.05.2012, 03:02
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

сначала делить строки split("\r\n");
потом полученный массив прогонят в цикле и делить строки split("||");

Последний раз редактировалось razerxxx, 20.05.2012 в 03:04.
Ответить с цитированием
  #3 (permalink)  
Старый 20.05.2012, 11:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Внезапно: вам нужна рекурсия.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 20.05.2012, 14:23
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 11.10.2011
Сообщений: 17

Ну это понятно. А что дальше делать с этими кусками?) Рекурсия используется, но работает не правильно. Хотя... нет не используется. Точно). Понял. Спасибо.)
Ответить с цитированием
  #5 (permalink)  
Старый 21.05.2012, 16:25
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 11.10.2011
Сообщений: 17

И так не получается. Вылетает ошибка 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;
	}
Ответить с цитированием
  #6 (permalink)  
Старый 21.05.2012, 18:29
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 11.10.2011
Сообщений: 17

А если использовать рекурсию в функции find получаю "Сценарий не отвечает"!
Ответить с цитированием
  #7 (permalink)  
Старый 21.05.2012, 23:57
Интересующийся
Отправить личное сообщение для a1exei Посмотреть профиль Найти все сообщения от a1exei
 
Регистрация: 11.10.2011
Сообщений: 17

Всё. Уже сделал, хоть и по-деревенски))). В общем работает.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена текста на картинку с помощью jQuery InCome jQuery 11 02.08.2011 14:07
Прокрутка текста с помощью кнопок GEN_18 Общие вопросы Javascript 3 15.04.2011 15:59
Выделение текста с помощью скрипта pro_xaoc Элементы интерфейса 5 24.03.2011 12:27
Поиск текста с помощью регулярных выражений Worker Javascript под браузер 7 10.03.2011 10:08
Перемещение текста с помощью мышки Владимир Седов Элементы интерфейса 3 07.01.2011 03:08