2016-01-18 1 views
2

У меня есть форма комментария, используя библиотеку @mention JavaScript, который позволяет мне сэкономить текст комментария на мой сервер, как этот 'This is a message for @[Kenneth Auchenberg](user:53453) and @[JasonDavis](user:1)'Удалить символы, обернутые вокруг имени

Когда я иду, чтобы показать комментарий HTML на странице я только нужно имя, а не идентификатор пользователя ... 'This is a message for @Kenneth Auchenberg and @JasonDavis'

Мне нужно преобразовать эту строку ...

var commentStr = 'This is a message for @[Kenneth Auchenberg](user:53453) and @[JasonDavis](user:1)'; 

в эту строку ...

var cleanCommentStr = 'This is a message for @Kenneth Auchenberg and @JasonDavis'; 

Как удалить плохие символы, обернутые вокруг имен, используя JavaScript?


Update

Я мог бы просто подойти к этому по-другому и добавить новый столбец в мою комментарии таблицу БД для хранения списка @mentioned пользователей, а затем просто удалить этот материал из комментариев перед сохранением текста комментария , Мне действительно нужен только идентификатор пользователя, когда создается комментарий, поэтому я могу создать уведомление для этого пользователя. После этого я могу просто показать имя пользователя в тексте комментария.

+0

[Это выглядит как обобщенное решение] (https://github.com/wooorm/strip-markdown). –

+1

@ KenY-N Я рад, что вы указали на соединение Markdown, которого я даже не заметил! Поскольку мои комментарии поддерживают уценку, я могу просто оставить как есть, и имя пользователя покажет как ссылку еще лучше спасибо! – JasonDavis

ответ

3

Вы можете использовать String#replace с RegEx.

RegEx101 Live Demo

/@\[([\w\s]+)\][^)]+\)/ 

RegEx Пояснение:

  1. @\[([\w\s]+)\]: Соответствует @[ следует любой алфавитно-цифрового символа, подчеркивания и пробелы один или большее количество раз, а затем следуют ]. В скобках () используются имя пользователя в первой группе - $1.
  2. [^)]+\): Совпадает с чем угодно до ). Таким образом, соответствие строки в скобках после @[blah blah].
  3. g: Глобальный флаг.

Regex Visualization

Замена @$1 заменит @[blah blah](anything) на @blah blah. Здесь $1 - первая захваченная группа, т. Е. Строка внутри квадратных скобок.

Демо:

var commentStr = 'This is a message for @[Kenneth Auchenberg](user:53453) and @[JasonDavis](user:1)'; 
 

 
commentStr = commentStr.replace(/@\[([\w\s]+)\][^)]+\)/g, '@$1'); 
 

 
document.body.innerHTML = commentStr;

+0

очень приятно! Я все еще пытаюсь решить, хочу ли я сохранить комментарий к БД с прикрепленным идентификатором или без него. Это открывает возможность сохранить его, как спасибо.Есть ли у вас мысли о том, куда идти? – JasonDavis

+0

@JasonDavis Я думаю, что обработанная строка должна быть сохранена в БД, если только библиотека, которую вы используете, не предоставляет возможности использовать эти userId и имя пользователя в скобках. – Tushar

+0

Пользователь в комментарии заставлял меня видеть выше, что это в основном просто ссылка Markdown ... поскольку мои комментарии поддерживают уценку, это приводит к тому, что имя пользователя отображается как имя ссылки, и я даже не понял, поэтому я мог бы просто оставить его как является. Спасибо за ваш код, хотя это отличный пример и полезно по дороге наверняка – JasonDavis