Показать сообщение отдельно
  #3 (permalink)  
Старый 14.07.2010, 07:32
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Не получится так сделать, паттерн регулярного выражения из произвольного текста формируется, вложенные конструкции (?=) не будут же работать? И lastIndex нужен для конца подстроки, а не найденной части до (?=). Придется посимвольно перебирать?

var finder = {
	escape: function (str) {
		return str.replace(/([?!^$.(){}:|=[\]+\-\/\\*])/g, "\\$1");
	},
	createSearchPattern: function (text) {
		// В некоторых браузерах неразрывный пробел (  или \u00A0) не попадает под облать действия метасимвола \s.
		// todo проработать остальные символы perfectionkills.com/whitespace-deviations
		return this.escape(text).replace(/^[\s\u0A00]+|[\s\u0A00]+$/, "").split(/[\s\u0A00]+/).join("[\\s\\u00A0]+");
	},
	find: function (text, search) {
		var regexp = new RegExp(this.createSearchPattern(search), "g");
		while (regexp.exec(text)) {
			alert(regexp.lastIndex);
		}
	}
};

finder.find("text text text", "text text");

Последний раз редактировалось Octane, 14.07.2010 в 07:48.
Ответить с цитированием