JQuery MarkItUp! を使用する機能に取り組んでいます。エディターを BBCode エディターとして。以下を含む BBCode の小さなサブセットのみを許可しています。
[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]
エディターを使用する 1,500 文字の「説明」フィールドがありますが、BBCode をすべて取り除いた 150 文字の説明のダイジェストも保存する予定です。
現在、C# でこれを行うために単純な RegEx を使用しています。基本的には、文字列に埋め込まれた BBCode を削除しますが、[img] URL や [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);