Frage

Ich arbeite an einer Funktion, die die JQuery MarkItUp verwendet! Editor als BBCode-Editor. Ich bin so dass nur eine kleine Teilmenge von BBCodes einschließlich der folgenden:

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

Ich habe ein 1500 Zeichen Feld „Beschreibung“, die den Editor verwendet, aber ich plane auch ein 150 Zeichen speichern verdaut die Beschreibung mit all dem BBCode abgezogen.

Ich bin derzeit eine einfache RegEx dies in C # zu tun. Es besteht im Wesentlichen Nukes eingebettet BBCodes in einem String, aber es hinterlässt eine Menge „lauten Inhalt“ wie der [img] URL oder die [youtube] Video-ID, dass ich möchte mich auch wie aus dem verdauen zu entfernen.

Hier ist meine aktuelle 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;
  }

Wenn ich die folgende Zeichenfolge durch diese Funktion ausführen, ich das Ergebnis erhalten unten dargestellt:

source

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]

Ergebnis

Das ist fett. Dies ist kursiv. Hier ist ein Bild: http://www.phatmac.com/Pics/Movies/Incredibles. jpg Hier ist ein Link zu ESPN. Hier ist ein YouTube-Video: WJ0UkZ3W4FA

Hier ist, was ich zurück

erhalten möchten

Das ist fett. Dies ist kursiv. Hier ist ein Bild: Hier ist ein Link auf ESPN. Hier ist ein YouTube-Video:

Wie kann ich meine StripBBCode () Funktion ändern, dies zu erreichen?

EDITED

Der Vorschlag von David unten in der ersten Antwort richtig war.

Hier ist, was ich bin jetzt mit:

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

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
War es hilfreich?

Lösung

Sie haben mehrere Tags bekommen, dass Sie die Inhalte entfernt werden soll, und den Rest, wo man nur die Tags entfernt werden soll.

Do von [img].*[/img] ersetzen mit String.Empty und [youtube].*[/youtube], und was Sie sonst noch brauchen die Inhalte entfernt, dann tun Sie Ihre Entfernung von [.*].

Edit:

Ich bin kein Experte Regex entweder, aber ich denke, @"\[img\].*?\[/img\]" ist das, was Sie wollen. Ich glaube nicht, dass Sie die Klammern in @"\[(.*?)\]" müssen, ich denke in diesem Zusammenhang Klammer Mittel, um den gefundenen Text zu speichern, damit Sie es wieder mit \1 mithalten können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top