 
			
				13.01.2015, 16:57
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.12.2014 
					
					
					
						Сообщений: 72
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Правильно ли я составил replace(regexp)? Можно ли упростить?
			 
			
		
		
		
		
// цель: получить строку со словами разделенными одним пробелом без пробелов в начале и конце строки
var reg = str.replace(/[\.\,\;\:\?\!\"\'\(\)\+\-\№\%\#\@\$\[\]\{\}\~\^\&\*\/\\\_\|\<\>]/g, " "); // заменить все символы на пробелы (всё экранировал на всякий случай), исключение [^A-Z] не использовал, т.к. планирую сделать несколько язков помимо русского и английского 
reg = reg.replace(/\s+/g, " "); // все пробелы ужать до одного
reg = reg.replace(/^\s|\s$/g, ""); // обрезать пробелы в начале и в конце строки
Спасибо  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.01.2015, 17:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Momon, 
 получить массив слов с помощью match и вашей первой  regexp разбить пробелом - всё 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.01.2015, 18:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.11.2013 
					
					
					
						Сообщений: 214
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Momon, ты думаешь кроме этих символов, которые ты заменяешь на пробелы, других не существует? как бы не так, их ооочень много     вообще подход неверный надо искать которые нужны и не наоборот. Типа так:
 
str = str.match(/[a-z0-9]+/ig);
str = (str) ? str.join(' ') : '';
В [...] клади нужные языки.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Rise, 13.01.2015 в 18:39.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 00:57
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.12.2014 
					
					
					
						Сообщений: 72
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, 
Извините, я не совсем понял как я получу массив слов своим первым regexp и match:
 
var reg = str.match(/[\.\,\;\:\?\!\"\'\(\)\+\-\№\%\#\@\$\[\]\{\}\~\^\&\*\/\\\_\|\<\>]/g)
Ведь оно же наоборот вернёт массив символов, которые мне не нужны.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Momon, 14.01.2015 в 01:04.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 01:06
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Momon, 
 примерно так ... но  Rise, показал более верное решение
 
var str = "на пробелы (всё        экранировал на всякий случай),          исключение [^A-Z] не использовал, т.к. планирую сделать несколько язков "
var reg = /[^\.\,\;\:\?\!\"\'\(\)\+\-\№\%\#\@\$\[\]\{\}\~\^\&\*\/\\\_\|\<\>\s]+/g;
alert(str.match(reg).join(' '));
alert(/^\s|\s$|\s{2,}/.test(str.match(reg).join(' ')))
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 14.01.2015 в 08:13.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 01:25
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.04.2014 
					
					
					
						Сообщений: 151
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 а если так: /\b\w\b/g 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 06:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.12.2014 
					
					
					
						Сообщений: 72
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, 
Спасибо за помощь, но пробелы между словами всё равно придётся ужимать до одного, а пробелы по концам строки обрезать. В итоге те же три строчки кода.
 
По поводу метода предложенного  Rise, я с ним полностью согласен. Но насколько я понял для позитивного подхода (т.е. для того чтобы вынимать из строки сами слова на разных языках) нужна либо внешняя библиотека, либо писать что то вроде такого монстра:
 
[^[a-zA-Z\-_ ’'‘ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖ
ÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠ
Œĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔ
ŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ]
 
В моем случае нет строгой необходимости удалять вообще все символы из строки, это всего лишь предосторожность, поэтому я просто указал все символы с клавиатуры, которые пользователь возможно захочет использовать для отделения слов вместо пробелов - запятые, тире, скобочки и т.д.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Momon, 14.01.2015 в 06:49.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 06:52
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.12.2014 
					
					
					
						Сообщений: 72
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 depp, 
\w и \b к сожалению это только латинский алфавит. Но спасибо за помощь! 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 08:13
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Momon
			
		
	 | 
 
	| 
		но пробелы между словами всё равно придётся ужимать до одного, а пробелы по концам строки обрезать. В итоге те же три строчки кода.
	 | 
 
	
 
 посмотрите ещё раз 5 пост - добавил пробелы и проверку на пробелы  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.01.2015, 11:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.12.2009 
					
					
					
						Сообщений: 1,714
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Momon
			
		
	 | 
 
	| 
		либо писать что то вроде такого монстра
	 | 
 
	
 
 Для того, чтобы получить символы из других языков, например, с кириллическими, иврита, греческого, армянского, арабского, хирагана и т. д. используйте форму \uXXXX, где «XXXX» — это значение символа Юникода, записанное в шестнадцатеричной форме.
 
Например по-гречески (используется диапазон 0370 до 03FF):
 
var κείμενο = "Οι λίγες στιγμές!!!  θα πρέπει να ανοίξετε τον υπολογιστή μπορεί    να φαίνεται αιώνα .";
alert((κείμενο.match(/[\u0370-\u03FF]+/g) || []).join(' '));
Эτοτ regexp найдёт только слова с символами на русском, иврите, греческом и арабском:
 
/[\u0370-\u03FF\u0400-\u04FF\u0590-\u05FF\u0600-\u06FF]+/g
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |