Показать сообщение отдельно
  #1 (permalink)  
Старый 09.02.2015, 21:32
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

Выделение текста при наборе пользователем
Пользователь набирает текст 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, и обрамлять тегами совпадающие... во

Последний раз редактировалось Momon, 09.02.2015 в 21:50.
Ответить с цитированием