Pregunta

Estoy trabajando en una función que utiliza el JQuery MarkItUp! editor como editor de BBCode. Sólo estoy permitiendo que un pequeño subconjunto de BBCode incluyendo los siguientes:

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

Tengo un campo de 1.500 caracteres "Descripción" que utiliza el editor, pero también estoy planeando para almacenar un carácter 150 digerir de la descripción con todo el BBCode quitó.

Actualmente estoy usando un simple expresión regular para hacer esto en C #. Básicamente armas nucleares incrustado BBCode en una cadena, pero deja tras de sí una gran cantidad de "contenido ruidoso" como el [img] URL o el [youtube] ID de vídeo que también me gustaría eliminar de la digestión.

Aquí está mi RegEx actual:

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

Si funciono con la siguiente cadena a través de esta función, aparece el resultado que se muestra a continuación:

fuente

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]

resultado

Esto es negrita. Esto está en cursiva. Aquí está una imagen: http://www.phatmac.com/Pics/Movies/Incredibles. jpg Aquí hay un enlace a ESPN. Aquí hay un video de YouTube: WJ0UkZ3W4FA

Esto es lo que yo quiero volver

Esto es negrita. Esto está en cursiva. Aquí está una imagen: Aquí hay un enlace a ESPN. Aquí hay un video de YouTube:

¿Cómo puedo modificar mi función StripBBCode () para lograr esto?

EDITADO

La sugerencia de David continuación en la primera respuesta era correcta.

Esto es lo que estoy usando ahora:

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

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
¿Fue útil?

Solución

Usted tiene varias etiquetas que desea que el contenido eliminado, y el resto en el que sólo desea que las etiquetas retirados.

Do sustituir de [img].*[/img] con String.Empty y [youtube].*[/youtube], y todo lo que necesita el contenido eliminado, a continuación, hacer su eliminación de [.*].

Editar:

No soy un experto en expresiones regulares tampoco, pero creo @"\[img\].*?\[/img\]" es lo que quiere. No creo que necesita los paréntesis en @"\[(.*?)\]", creo que en este contexto paréntesis medios para guardar el texto que coincide con lo que puede coincidir de nuevo con \1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top