Я опоздал на пару лет, и кажется, что вы, возможно, избежали «воссоздания колеса», но я решил добавить свои два цента на тот случай, если вы (OP) или кто-то еще захотят попробовать свои силы, реализуя эту функциональность с нуля.
Утилита управления "упоминанием" состоит из 3 компонентов:
Модуль автозаполнения : Компонент, отвечающий за получение и отображение набора элементов, которые можно использовать для создания упоминания, с учетом строки.
Модуль отслеживания упоминаний : компонент, отвечающий за отслеживание данных, связанных с упоминанием; Как минимум, местоположение, а также поверхностные и существенные (если они существуют) значения каждого упоминания должны отслеживаться во всех модификациях текста элемента ввода, к которому прикреплена утилита.
Модуль визуального разграничения упоминаний : Компонент, отвечающий за разграничение текста упоминания от остального текста в элементе ввода, к которому прикреплена утилита
Учитывая эту разбивку такой утилиты, должно стать ясно, что first и second в исходном сообщении - это те, которые могут быть предприняты при реализации упомяните модули управления и автозаполнения соответственно.
Дальнейшее изучение 3-х модулей на простом английском языке было бы утомительно; гораздо лучше смотреть на код! К счастью, я сделал решение, Mentionator , которое является надежным (более того, чем все другие решения, предлагаемые здесь), хорошо структурированным, простым в использовании и обильно прокомментированным. Так что стоит посмотреть, хотите ли вы создать оригинальное решение или справочный материал для создания собственного.