 
			
				06.02.2019, 13:19
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Как разбить строку по первому совпадению с разделителем?
			 
			
		
		
		
		Имеется: 
var str = 'Lorem ipsum dolor sit amet'; // и тд миллион слов
console.log(str.split(' ')); // -> [ 'lorem', 'ipsum', 'dolor', 'sit', 'amet' ]
Должно быть:
 
var str = 'Lorem ipsum dolor sit amet',
    firstSpace = /\s/.exec(str).index;
console.log(str.метод(firstSpace)); // -> [ 'lorem', 'ipsum dolor sit amet' ]
Насколько я понимаю метод  split будет перебирать всю строку даже найдя первое совпадение, мне же нужно остановить поиск при первом обнаружении пробела.
 
Как это сделать?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 13:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.12.2009 
					
					
					
						Сообщений: 1,714
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var str = 'Lorem ipsum dolor sit amet';
console.log(str.split(/\s(.*)/g, 2));
 
Если нужно по первому символу...
 
var str = 'Lorem ipsum dolor sit amet';
var index = str.indexOf(" ");
console.log([str.slice(0, index), str.slice(index + 1)]);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 16:58
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Malleys, 
 спасибо. 
Было бы круто, если бы был аналог TextNode.splitText(offset), но только для строк.
 ИЗОБРЕТЕНИЕ: метод  slash для строк
 
// ВНИМАНИЕ! МЕТОД НЕ СУЩЕСТВУЕТ !
var str = 'Lorem ipsum dolor sit amet';
str.slash(' '); // -> [ 'lorem', 'ipsum dolor sit amet' ]
str.slash(' ',2); // -> [ 'lorem ipsum', 'dolor sit amet' ]
str.slash(' ',-1); // -> [ 'lorem ipsum dolor sit', 'amet' ]
str.slash(8); // -> [ 'lorem ip', 'sum dolor sit amet' ]
str.slash(-3); // -> [ 'lorem ipsum dolor sit a', 'met' ]
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 06.02.2019 в 18:11.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 17:43
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		  
var str = 'Lorem ipsum dolor sit amet';
console.log(/(\S+)\s(.*)/.exec(str).slice(1)); // -> [ 'lorem', 'ipsum dolor sit amet' ]
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 18:08
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 рони, 
 хитро! 
 
Если идея вас заинтересовала, попробуйте реализовать метод slash. Знаю, что нужно будет дополнить прототип String. Я тоже займусь на досуге. 
 
Спасибо! 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 06.02.2019 в 18:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 19:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Teamur
			
		
	 | 
 
	| 
		реализовать метод slash
	 | 
 
	
 
 что это?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 19:45
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, 
это следствие отсутствия нормального метода разбиения строки на две части. Так сказать идея )
 https://javascript.ru/forum/misc/767...tml#post503236
Скоро я выложу реализацию, не стал создавать новую тему )  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 06.02.2019 в 19:47.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 20:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.12.2009 
					
					
					
						Сообщений: 1,714
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
{
	
class SplittableString extends String {
	slash(char, offset) {
		if(arguments.length === 0) return this.slash("");
		if(arguments.length === 1) return Number.isFinite(arguments[0]) ?
			this.slash("", arguments[0]) : this.slash(arguments[0], 1);
		var matches = Array.from(str.matchAll(char));
		offset -= char.length;
		if(offset < 0) offset += matches.length + char.length + (char === "" ? -1 : 0);
		var index = matches[offset].index;
		return [str.slice(0, index), str.slice(index + char.length)];
	}
};
var str = new SplittableString('Lorem ipsum dolor sit amet');
console.log(str.slash(' ')); // -> [ 'lorem', 'ipsum dolor sit amet' ]
console.log(str.slash(' ',2)); // -> [ 'lorem ipsum', 'dolor sit amet' ]
console.log(str.slash(' ',-1)); // -> [ 'lorem ipsum dolor sit', 'amet' ]
console.log(str.slash(8)); // -> [ 'lorem ip', 'sum dolor sit amet' ]
console.log(str.slash(-3)); // -> [ 'lorem ipsum dolor sit a', 'met' ]
}
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 20:41
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Malleys, 
Класс! 
 
А я всё сижу пишу свою реализацию ... 
 
Спасибо! 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 07.02.2019 в 07:27.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.02.2019, 23:24
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Всё что смог сделать ) Работает, но я думаю код мудреный: 
const oo=console.log;
String.prototype.slash=function(a,b=1){
  var s=this, l=s.length, i, f=(j=0)=>[s.slice(0,i),s.slice(i+j)];
  oo(s,b,a);
  if(a.length){ // a:string
    var c=0, m='indexOf', k=1;
    if(b==1){
      i=s[m](a);
      return i<0?s:f(1)
    };
    if(b<1){
      m='lastIndexOf';
      b=-b;
      k=-1
    };  
    while(c!=b){
      i=s[m](a,i+k);
      if(i<0){break};
      c++
    };
    return f(1)
  };
  if(Math.abs(a)>=l){return s};
  i=a>0?a:l+a;
  return f()
};
oo('lorem ipsum/dolor sit/amet'.slash('/',-2)); // -> [ 'lorem ipsum', 'dolor sit/amet' ]
Буду очень вам признателен за советы по возможному улучшению кода, спасибо!  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 07.02.2019 в 09:27.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |