Пользователь набирает текст input и в строке str происходит его выделение, например bold, при помощи обрамления тегами <b></b>. Казалось бы простой инструмент, но как реализовать, если учесть что:
1. Пользователь может вводить слова невпопад.
2. Между словами могут быть разные символы .,;- и т.д.
3. Последнее слово может являться начальной частью слова.
var str = "слово1, -слово2; слово3.";
var input = "слово1 слов";
// У меня такая идея:
str = str.replace(/[\.\,\;\-]/g, " "); // удаляем символы
str = str.replace(/\s+/g, " ").replace(/^\s|\s$/g, ""); // сжимаем пробелы
var arr = str.split(" "); // разбиваем строку по пробелам
for (var i = 0; i < arr.length; i++) {
str = str.replace(new RegExp("(\\s|^|-|>|\\.|,|;)(" + arr[i] + ")(?!\\S*</b>)"), "$1<b>$2</b>");
}
Но символы то остаются невыделенными и я придумал велосипед (хотя я наверно уже на нём еду).
Значит, при помощи match или ещё как находить все символы между словами:
(какие то символы)слово1(какие то символы)слово2(какие то символы)слово3(какие то символы)
Потом каждую такую группу разбивать split на отдельные символы, создавать ещё один цикл (какой там по счету) и проводить последовательное сравнение символов групп из str и input, и обрамлять тегами совпадающие... во