 
			
				14.02.2013, 20:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.02.2013 
					
					
					
						Сообщений: 5
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Помогите с регулярным выражением
			 
			
		
		
		
		Здравствуйте, возникла пробема с построением регулярки. Есть переменная content, в которую я из файла считываю шаблон вида 
var content='<div style="clear: both;"> </div> 
    <script type="text/javascript">// <![CDATA[ 
    jQuery(document).ready(function(){ 
 
        jQuery("#he5").css('display','none'); 
        jQuery('#hb5').on("click",function () { 
            jQuery('#he5').toggle('slow'); 
        }); 
    }) 
    // ]]></script>'; 
 
Нужно получить в отдельную переменную весь контетнт до тега <script> и в другую - содержиое тега <script> (то есть все то, что находится между открывающим и закрывающим тегами) 
 
Написанная регулярка не работает - выдает null( Хотя ожидался массив из 3 элементов.  
var htmlJsRe = new RegExp('([\w,\W]*)<script type="text\\/javascript">([\w,\W]*)<\\/script>', 'mg'); 
 
var htmlJsReArray = htmlJsRe.exec(content); 
 
Подскажите пожалуйста как ее исправить 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2013, 20:43
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 без статуса 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.05.2012 
					
					
					
						Сообщений: 8,219
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var content='<div style="clear: both;"> </div>\
<script type="text/javascript">([\w,\W]*)<\\/script>\', \'mg\');\
 jQuery(document).ready(function(){\
\
 jQuery("#he5").css("display","none");\
 jQuery("#hb5").on("click",function () {\
 jQuery("#he5").toggle("slow");\
 });\
 })\
 // ]]><'+'/'+'script>';
var script = (' '+content).split(eval('/(<script[^>]*?>|<\\/script>)/igm'));
var contentDoScrpt=script[0];
var teg1=script[1];
var teg2=script[3];
var contentteg=script[2];
alert(contentDoScrpt)
alert(contentteg)
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Deff, 14.02.2013 в 22:46.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2013, 22:34
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Newstory
			
		
	 | 
 
	| 
		Написанная регулярка не работает
	 | 
 
	
 
 работает, нужно только экранировать \w\W и запятая там ненужна.
 
var content='<div style="clear: both;"> </div>\
<script type="text/javascript">// <![CDATA[\
 jQuery(document).ready(function(){\
\
 jQuery("#he5").css("display","none");\
 jQuery("#hb5").on("click",function () {\
 jQuery("#he5").toggle("slow");\
 });\
 })\
 // ]]><\/script>';
var htmlJsRe = new RegExp('([\\w\\W]*)<script type="text\/javascript">([\\w\\W]*)<\/script>', 'mg');
var htmlJsReArray = htmlJsRe.exec(content);
alert(htmlJsReArray.join('\n\n\n'));
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 14.02.2013 в 22:38.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 10:53
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.02.2011 
					
					
					
						Сообщений: 351
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ошибки в выражении в исходном сообщении: 
1. [\w,\W] - соответствует словному символу, запятой, несловному символу, запятая тут лишняя, она и так несловный символ. Заменяем на [\w\W] (хотя в этом случае принято использовать [\s\S]) 
2. Звездочка после закрывающей квадратной скобки говорит - найти сколько угодно повторений, причем чем больше, тем лучше. Поэтому сначала выражение пройдет по всей строке, а потом посимвольно будет откатываться назад. Чтобы этого не было, для ускорения, добавляем вопрос, т.е. пишем так [\w\W]*? 
3. Прямые слэши в текстовых строчках маскировать нет необходимости. 
заменяем text\/javascript на text/javascript и <\/script> на </script> 
4. Собственно, из-за чего не работало. Обратные слэши маскоровать в текстовых строках надо обязательно, т.е. [\\w\\W] 
После всех этих исправлений: 
var htmlJsRe = new RegExp('([\\w\\W]*?)<script type="text/javascript">([\\w\\W]*?)</script>', 'mg'); 
5. Вызывает сомнение нужность флагов 'mg', а вот флаг 'i' возможно и нужен, вдруг тэги будут написаны большими буквами. 
6. <script type="text/javascript"> возможно стоит заменить на <script[^>]*> (кстати, тут после звездочки вопрос ни к чему :-) ) 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось rgl, 15.02.2013 в 10:59.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 11:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 rgl, 
 Вы сами проверяли свои размышления? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 11:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.02.2011 
					
					
					
						Сообщений: 351
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Что конкретно? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 11:27
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		rgl,
  
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
var content='<div style="clear: both;"> </div>\
<script type="text/javascript">// <![CDATA[\
 jQuery(document).ready(function(){\
\
 jQuery("#he5").css("display","none");\
 jQuery("#hb5").on("click",function () {\
 jQuery("#he5").toggle("slow");\
 });\
 })\
 // ]]><\/script>';
//var htmlJsRe = new RegExp('([\\w\\W]*)<script type="text\/javascript">([\\w\\W]*)<\\/script>', 'mg');
var htmlJsRe = new RegExp('([\\w\\W]*?)<script type="text/javascript">([\\w\\W]*?)</script>', 'mg');
var htmlJsReArray = htmlJsRe.exec(content);
alert(htmlJsReArray.join('\n\n\n'));
</script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 11:42
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.02.2011 
					
					
					
						Сообщений: 351
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ошибся, в <\/script> маскировка нужна, но это уже не регулярные выражения и не JavaScript, этого требует html, а я тестирую скрипты без html, вот и ошибся. Если поместить мое выражение в отдельный файл и включить с помощью <script src= то все работает. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2013, 19:54
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.02.2013 
					
					
					
						Сообщений: 5
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Спасибо всем огромное за примеры и подробный разбор моего регулярного выражения! Проблема решена) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |