Domanda

Sto lavorando a una funzione che utilizza il JQuery MarkItUp! Editor come un editor di BBCode. Sto consentendo solo un piccolo sottoinsieme di BBCodes tra cui le seguenti:

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

Ho un campo "Descrizione" 1.500 personaggio che usa l'editor, ma sto anche pensando di memorizzare un carattere di 150 digerire della descrizione con tutta la BBCode spogliato fuori.

Attualmente sto usando un semplice RegEx per fare questo in C #. E 'fondamentalmente armi nucleari BBCodes all'interno di una stringa, ma lascia dietro di sé un sacco di "contenuti rumorosa" come il [img] URL o la [youtube] ID video che mi piacerebbe anche a rimuovere dal digerire.

Ecco il mio RegEx corrente:

  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;
  }

Se eseguo la seguente stringa attraverso questa funzione, ottengo il risultato illustrato di seguito:

sorgente

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]

risultato

Questo è in grassetto. Questo è in corsivo. Ecco un'immagine: http://www.phatmac.com/Pics/Movies/Incredibles. jpg Ecco un link per ESPN. Ecco un video di YouTube: WJ0UkZ3W4FA

Ecco quello che voglio tornare

Questo è in grassetto. Questo è in corsivo. Ecco un'immagine: Ecco un link per ESPN. Ecco un video di YouTube:

Come posso modificare la mia funzione StripBBCode () per raggiungere questo obiettivo?

A CURA

Il suggerimento di David sotto nella prima risposta era corretta.

Ecco quello che sto usando ora:

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

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
È stato utile?

Soluzione

Hai avuto diversi tag che si desidera che il contenuto rimosso, e il resto in cui desideri solo i tag rimossi.

Do sostituire di [img].*[/img] con String.Empty e [youtube].*[/youtube], e quant'altro è necessario il contenuto rimosso, poi fare la vostra rimozione di [.*].

Modifica:

Non sono un esperto di espressione regolare sia, ma penso che @"\[img\].*?\[/img\]" è quello che vuoi. Non credo che avete bisogno le parentesi in @"\[(.*?)\]", credo che in questo contesto parentesi mezzi per salvare il testo corrispondente in modo da poter abbinare di nuovo con \1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top