質問

JQuery Markitupを使用する機能に取り組んでいます! BBCodeエディターとしてのエディター。以下を含むBBCodesの小さなサブセットのみを許可しています。

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

私はエディターを使用する1,500文字の「説明」フィールドを持っていますが、150文字を保存することも計画しています ダイジェスト すべてのBBCodeが剥奪された説明の。

現在、C#でこれを行うために単純な正規表現を使用しています。基本的には、bbcodeを文字列に埋め込みましたが、[IMG] URLや[YouTube]ビデオIDなど、ダイジェストから削除したい[YouTube]ビデオIDなど、多くの「ノイズの多いコンテンツ」が残ります。

これが私の現在の正規表現です:

  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ビデオです:

これを達成するために、stripbbcode()関数を変更するにはどうすればよいですか?

編集

最初の答えで以下のDavidからの提案は正しかった。

これが私が今使っているものです:

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

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);
役に立ちましたか?

解決

コンテンツを削除したいタグがいくつかあり、残りはタグのみを削除したいとしています。

交換してください [img].*[/img] string.empty、および [youtube].*[/youtube], 、そして、あなたがコンテンツを削除する必要がある他のものは何でも、あなたの削除を行います [.*].

編集:

私も正規表現の専門家ではありませんが、 @"\[img\].*?\[/img\]" あなたが望むものです。括弧が必要だとは思わない @"\[(.*?)\]", 、この文脈では、括弧が一致したテキストを保存することを意味するので、もう一度一致させることができると思います。 \1.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top