Question

Je travaille sur une fonctionnalité qui utilise le JQuery markItUp! éditeur comme éditeur de BBCode. Je ne permettant à un petit sous-ensemble de BBCodes y compris les éléments suivants:

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

J'ai un champ de 1500 caractères « Description » qui utilise l'éditeur, mais je prévois également de stocker un 150 caractères digérer de la description avec tous les BBCode dépouillé.

J'utilise actuellement simple RegEx pour faire en C #. Il en fait des armes nucléaires intégré BBCodes dans une chaîne, mais il laisse derrière lui un grand nombre de « contenu bruyant » comme le [img] URL ou [youtube] ID vidéo que je aimerais aussi retirer de la digérer.

Voici mon RegEx actuelle:

  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 je lance la chaîne suivante grâce à cette fonction, je reçois le résultat indiqué ci-dessous:

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]

Résultat

est en gras. Ceci est en italique. Voici une image: http://www.phatmac.com/Pics/Movies/Incredibles. jpg Voici un lien vers ESPN. Voici une vidéo YouTube: WJ0UkZ3W4FA

Voici ce que je veux revenir

est en gras. Ceci est en italique. Voici une image: Voici un lien vers ESPN. Voici une vidéo YouTube:

Comment puis-je modifier ma fonction StripBBCode () pour y parvenir?

ÉDITÉ

La suggestion de David ci-dessous dans la première réponse était correcte.

Voici ce que j'utilise maintenant:

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

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
Était-ce utile?

La solution

Vous avez obtenu plusieurs balises que vous voulez que le contenu supprimé, et le reste où vous voulez que les balises retirées.

Ne pas remplacer des [img].*[/img] avec String.Empty et [youtube].*[/youtube], et tout ce dont vous avez besoin le contenu enlevé, puis faites votre déménagement de [.*].

Edit:

Je ne suis pas un expert regex non plus, mais je pense que @"\[img\].*?\[/img\]" est ce que vous voulez. Je ne pense pas que vous avez besoin des parenthèses dans @"\[(.*?)\]", je pense que dans ce contexte parenthèses des moyens pour enregistrer le texte correspondant afin que vous puissiez correspondre à nouveau avec \1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top