Показать сообщение отдельно
  #38 (permalink)  
Старый 20.02.2011, 21:59
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Т.к. теоретически точка начала совпадений мот быть в любой(каждой) позиции простым циклом нельзя(без встроенных функций[любых]).
Мой вариант:
String.prototype.at = function(str) {
	var tl = this.length, sl = str.length;
	if(tl >= sl) {
		for(var i=0, j=0; i<tl; i++) {
			if(this[i] == str[j]) {
				++j; if(sl == j) {return ++i-j;}
			}
			else{
				if(this[i] == str[0]) {j=1;}
				else {i-=j; j=0;}
			}
		}
		return -1;
	}
	else {
		return -1;
	}
}

var s1 = 'aababababaO_o', l1 = 'ababaO', l2 = 'abac', l3 = 'aa', l4 = 'O_o';

alert( [
	[s1.at(l1), s1.indexOf(l1)],
	[s1.at(l2), s1.indexOf(l2)],
	[s1.at(l3), s1.indexOf(l3)],
	[s1.at(l4), s1.indexOf(l4)]
].join('\n') );

Последний раз редактировалось float, 20.02.2011 в 22:11.
Ответить с цитированием