Вопрос

Я работаю над функцией, которая использует Markitup jQuery! Редактор в качестве редактора BBCode. Я только разрешаю небольшое подмножество BBCodes, включая следующее:

[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]

У меня есть 1500 символов «Описание», которое использует редактор, но я также планирую хранить 150 символов переварить описания со всеми BBCode убрали.

В настоящее время я использую простое регельс, чтобы сделать это в C #. Он в основном NUKES встроенными BBCodes в строке, но она оставляет за собой много «шумного контента», как URL [IMG] или видео ID [YouTube], который я также хотел бы удалить из дайджеста.

Вот мое текущее регулярное выражение:

  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:

Как я могу изменить функцию My PlassBCode () для этого?

Отредактировано

Предложение из Дэвида ниже в первом ответе было правильным.

Вот что я использую сейчас:

 string r = Regex.Replace(s,
    @"\[youtube\].*\[\/youtube\]",
    String.Empty, RegexOptions.IgnoreCase);

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
Это было полезно?

Решение

У вас есть несколько тегов, которые вы хотите, чтобы содержимое удалено, а остальное, где вы хотите, только теги удалены.

Заменить [img].*[/img] со строкой. Пусты и [youtube].*[/youtube], и все, что вам нужно, чтобы содержимое удалено, то сделайте ваше удаление [.*].

Редактировать:

Я тоже не эксперт Regex, но я думаю, @"\[img\].*?\[/img\]" это то, что вы хотите. Я не думаю, что вам нужны скобки в @"\[(.*?)\]", Я думаю, что в этом контексте скобки означает сохранить соответствующий текст, чтобы вы могли сопоставить его снова с \1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top