 
			
				17.08.2012, 12:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.06.2012 
					
					
					
						Сообщений: 2
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Помогите написать регулярку
			 
			
		
		
		
		Здравствуйте. Прошу помочь с регуляркой. 
Есть строка типа:     ........alt=1_2|176_2|175_1|..... 
я ищу а есть ли в этой строке элементы с определенным индексом после подчеркивания, то есть создаю такой шаблон: 
var str = '_' + (index+1) + '|'; //динамически создаваемое значение типа _2| 
regex = new RegExp(str+'/');
 
а далее, если в этой строке есть такое вхождение(-ия), то их нужно найти и заменить на число, скажем Х 
вот и я пишу 
regNew = new RegExp('(\d+|alt=\d+)'+str+'/'); 
foundInCookie = forOpenList.match(regNew); 
 
НО ОН УПОРНО НИЧЕГО НЕ НАХОДИТ!! Прошу помочь...   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.08.2012, 13:10
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 больше обратных слешей: \d -> \\d 
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.05.2014, 21:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Не хотелось создавать новой темы, сорри за воскрешение поста, она вроде как подходит моей проблеме. 
Что-то я немножечко туплю. Подскажите, как разбить строку на пробелы так, чтоб пробелы не учитывались в скобках:
 
'vasia(petia   grisha) grisha( petia vasia) petia(vasia grisha )'
 
На выходе должен получиться такой массив:
 
['vasia(petia   grisha)', 'grisha( petia vasia)', 'petia(vasia grisha )']
 
В голову лезут страшные решения: например, разбить строку сплитом по пробелам и в цикле воссоединить содержимое скобок. Уверен, есть решения по-адекватнее.
 
Спасибо.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.05.2014, 21:59
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.09.2013 
					
					
					
						Сообщений: 1,436
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var str = 'vasia(petia   grisha) grisha( petia vasia) petia(vasia grisha )';
var result = str.match(/\S*?\(.*?\)/g);
 
Примерно так. Шаблон подправить под реально возможные варианты строки.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Erolast, 08.05.2014 в 22:06.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.05.2014, 22:10
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от FINoM
			
		
	 | 
 
	| 
		Подскажите, как разбить строку на пробелы так, чтоб пробелы не учитывались в скобках
	 | 
 
	
 
 В данном случае, с точки зрения регулярных выражений, проще вытащить то, что требуется по шаблону. Например, так:
 
alert('vasia(petia   grisha) grisha( petia vasia) petia(vasia grisha )'.match(/[^(]+\([^)]*\)/g));
 
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось nerv_, 08.05.2014 в 22:13.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				09.05.2014, 02:51
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Как то так. Но тут есть подводные камни.) 
<script>alert(
    'vasia(petia   grisha) grisha( petia vasia) petia(vasia grisha )'
    .split(/\s(?![^(]*\))/g)
.join('\n'));</script>
 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Aetae, 09.05.2014 в 02:54.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				20.05.2014, 15:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Спасибо всем огромное. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.09.2014, 18:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		С регулярками у меня всё лучше, но, порой, возникают проблемы, которые не могу понять, как решить. Нужно извлечь содержимое скобок из строки: 
'(:not(.hide))'.replace( /\(([^\(\)]*)\)/, '$1' ); //":not(.hide)"
 
Работает верно, но, если добавить что-то перед строкой, результат будет не таким, как ожидаю:
 
'xxx(:not(.hide))'.replace( /.*\(([^\(\)]*)\)/, '$1' ); //".hide)"
 
Как извлечь содержимое скобок из второго примера? 
Псевдопаттерн:  
строка(содержимое)
 
Спасибо.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.09.2014, 18:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Что-то ты мудришь  : 
alert(
    'xxx(:not(.hide))'.replace( /^.*?\((.*)\)/, '$1' )
)
Кстати  
'(:not(.hide))'.replace( /\(([^\(\)]*)\)/, '$1' ); //":not(.hide)"
  вовсе не ":not(.hide)", а "(:not.hide)"  
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Aetae, 03.09.2014 в 18:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.09.2014, 18:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.09.2010 
					
					
					
						Сообщений: 2,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Aetae, спасиб, не могу плюсик поставить. 
	
 
	| 
		
			Сообщение от Aetae
			
		
	 | 
 
	| 
		вовсе не ":not(.hide)", а "(:not.hide)"
	 | 
 
	
 
 Точно, перепутал регулярки, которые пробовал.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |