 
			
				10.06.2013, 02:52
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.03.2011 
					
					
					
						Сообщений: 177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				[РЕШЕНО] Извлечь функцию из функции
			 
			
		
		
		
		Нет больше моих сил. Нужна помощь.  
Дано функция: 
 
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
	$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				// smth
			}	
		}
	});
}
Задача: получить функцию $.ajax как объект или строку для последующего внесения изменений.
 Дополнительное условие: нельзя редактировать первоначальную функцию.
 
Я так понимаю, что единственный способ решить такую головоломку, это взять someFunc как строку и разбить регулярным выражением, отредактировать, а потом собрать обратно. Но у меня упорно не получается написать регулярку для извлечения $.ajax( .. ). 
 
Спсибо, что дочитали. Любые идеи приветствуется.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось cmd, 12.06.2013 в 08:47.
				Причина: решено
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 08:46
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от cmd
			
		
	 | 
 
	| 
		не получается написать регулярку для извлечения $.ajax( .. ).
	 | 
 
	
 
 Как вариант...
 
var str="function someFunc(somevar) { "
str=str+"somevar = typeof(somevar) != 'undefined' ? somevar : 100; "
str=str+"$.ajax({ "
str=str+"url: 'index.php', "
str=str+"type: 'post', "
str=str+"data: 'somevar=' + somevar, "
str=str+"dataType: 'json', "
str=str+"success: function(json) { "
str=str+"// smth "
str=str+"} "
str=str+"} "
str=str+"}); "
str=str+"} "
alert(str.replace(/(\$\.ajax\(\{[\s\S]+\}\);)/gm,'test'));
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 11:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		1.Внутри ajax одна '}' -лишняя 
2.
 
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
	$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				// smth
			//}	
		}
	});
}
var str=someFunc.toString();
alert('$.ajax'+str.split('$.ajax')[1].split('})')[0]+'})');
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось vadim5june, 10.06.2013 в 11:22.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 11:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.03.2011 
					
					
					
						Сообщений: 177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Спасибо, я со скобочками сам справился) 
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
	$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				// smth
			//}	
		}
	});
}
var addToCart_string = addToCart.toString();
addToCart_string = addToCart_string.match(/(\$\.ajax\(\{[\s\S]+\}\);)/gm); 
// теперь у меня есть строка с ajax запросом
// который надо отредактировать
// черещ new Function не получилось и через eval тоже
// по ходу надо распарсить строку и получить параметры
// а потом отъявить
var myNewFunction = $.ajax(params);
Вот тут я сейчас ломаю голову и ищу какой-то готовый инструмент для синтаксического анализа строки.  
		
	
		
		
		
		
		
			
				__________________ 
				Cogito, ergo sum
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 11:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
	$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				// smth
			//}	
		}
	});
}
var somevar='somevar';
var str=someFunc.toString();
var pp='var pars='+str.split('$.ajax(')[1].split('})')[0]+'}';eval(pp);for(var u in pars)alert(u+'='+pars[u]);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 12:03
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.09.2011 
					
					
					
						Сообщений: 523
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Почему бы просто не переопределить функцию someFunc? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 12:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.03.2011 
					
					
					
						Сообщений: 177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		Почему бы просто не переопределить функцию someFunc?
	 | 
 
	
 
 zebra, я же дурак отмороженный...
 vadim5june, нетривиально и сыро, но буду разбираться. Спасибо большое.  
		
	
		
		
		
		
		
			
				__________________ 
				Cogito, ergo sum
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 13:00
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.03.2011 
					
					
					
						Сообщений: 177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<script>
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
	$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				// smth
			//}	
		}
	});
}
var somevar='somevar';
var str=someFunc.toString();
var parameters = 'var pars='+str.split('$.ajax(')[1].split('})')[0]+'}'; eval(parameters);
var paramsArray = {};
	for (var u in pars) {
		if (u && pars && u) {
			paramsArray[u]=pars[u];
		}
	}
	
var my_ajax_funciton_now = $.ajax(someFunc); // это провал. зараза выполняет вместо того, чтобы присваивать.
console.log(my_ajax_funciton_now );
</script>
 
</body>
</html>
 
		
	
		
		
		
		
		
			
				__________________ 
				Cogito, ergo sum
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось cmd, 10.06.2013 в 13:03.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 13:41
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от cmd
			
		
	 | 
 
	| 
		 какой-то готовый инструмент для синтаксического анализа строки.
	 | 
 
	
 
 https://github.com/zaach/jison
Грамматика JS там в примерах есть, а вот лексем вроде нету. Но найти можно если сильно захотеть.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.06.2013, 14:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Студент 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.04.2012 
					
					
					
						Сообщений: 1,113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		насколько я понимаю нужно изменить значения внутри ajax и переопределить функцию someFuns 
тогда так
 
<!DOCTYPE html>
<head>
 <script 
src="http://code.jquery.com/jquery-1.9.1.js"> 
</script>
</head>
<body>
<script>
function someFunc(somevar) {
	somevar = typeof(somevar) != 'undefined' ? somevar : 100;
$.ajax({
		url: 'index.php',
		type: 'post',
		data: 'somevar=' + somevar,
		dataType: 'json',
		success: function(json) {
				}
	});
};
var somevar='somevar';
var str=someFunc.toString();
var str0=str.split('$.ajax(')[0];
var stre=')}';
var parameters = 'var pars='+str.split('$.ajax(')[1].split('})')[0]+'}'; eval(parameters);
var paramsArray = {};
	for (var u in pars) {
		if (u && pars && u) {
			paramsArray[u]=pars[u];//здесь переопределяем значения
		}
	}
;	
pp=str0+'$.ajax('+JSON.stringify(paramsArray)+stre;
eval(pp);
console.log(someFunc.toString() );
</script>
 </body>
</html>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |