Не получится так сделать, паттерн регулярного выражения из произвольного текста формируется, вложенные конструкции (?=) не будут же работать? И 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");