Я работаю над функцией, которая использует JQuery MarkItUp! редактор как редактор BBCode. Я разрешаю только небольшое подмножество BBCode, включая следующее:
[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]
У меня есть 1500-символьное поле «Описание», в котором используется редактор, но я также планирую сохранить 150-символьный дайджест описания, убрав весь BBCode.
В настоящее время я использую простой RegEx для этого на С#. По сути, он удаляет встроенные BBCode в строку, но оставляет после себя много «шумного контента», такого как URL-адрес [img] или идентификатор видео [youtube], которые я также хотел бы удалить из дайджеста.
Вот мой текущий RegEx:
public static String StripBBCode(string bbCode)
{
string r = Regex.Replace(bbCode,
@"\[(.*?)\]",
String.Empty, RegexOptions.IgnoreCase);
// Finally, replace all newlines with a space
r = Regex.Replace(r,
@"(\r\n|\n\r|\r|\n)+",
@" ", RegexOptions.IgnoreCase);
return r;
}
Если я запускаю следующую строку через эту функцию, я получаю результат, показанный ниже:
источник
This is [b]bold[/b]. This is [i]italic[/i].
Here is an image:
[img]http://www.phatmac.com/Pics/Movies/Incredibles.jpg[/img]
Here is a link to [url=http://espn.go.com]ESPN[/url].
Here is a YouTube video:
[youtube]WJ0UkZ3W4FA[/youtube]
результат
Это смело. Это курсив. Вот изображение: http://www.phatmac.com/Pics/Movies/Incredibles.jpg Вот ссылка на ESPN. Вот видео на YouTube: WJ0UkZ3W4FA
Вот что я хочу вернуть
Это смело. Это курсив. Вот изображение: Вот ссылка на ESPN. Вот видео на YouTube:
Как я могу изменить свою функцию StripBBCode() для достижения этой цели?
ОТРЕДАКТИРОВАНО
Предложение Дэвида ниже в первом ответе было правильным.
Вот что я использую сейчас:
string r = Regex.Replace(s,
@"\[youtube\].*\[\/youtube\]",
String.Empty, RegexOptions.IgnoreCase);
r = Regex.Replace(r,
@"\[img\].*\[\/img\]",
String.Empty, RegexOptions.IgnoreCase);