0

私はしばらくの間この問題に苦しんでいます:

HTMLを含む文字列があり、正規表現を使用してタグ間の文字を取得しています。次に、これらの文字にTextFormatを適用しようとしています。

問題は、「text」プロパティの代わりにTextFieldの「htmlText」プロパティを使用していることです(HTMLタグを表示したくないため)。そのため、TextFormatを適用すると、正規表現から返される文字インデックスが正しくありません。

問題を説明するサンプルコードを次に示します。

var txt:String = "<b>Sample</b> string with bold text";

var tf:TextField = new TextField();
addChild(tf);
tf.htmlText = txt;

var format:TextFormat = new TextFormat();
format.bold = true;

var regExp:RegExp = /<b>(.*?)<\/b>/g;
var match:Object = regExp.exec(txt);
while (match != null) {
    tf.setTextFormat(format, match.index, match.index + match[0].length);
    match = regExp.exec(txt);
}

これは私に与えます:

「太字のサンプル文字列」

希望の代わりに:

「太字のサンプル文字列」

match[0].lengthHTMLタグが原因で、7文字が長すぎるためです<b></b>

これについて私は何ができますか?ありがとう!

4

2 に答える 2

0
tf.setTextFormat(format, match.index, match.index + match[1].length); 
于 2012-03-01T16:28:35.517 に答える
0

TextField.htmlTextを使用<b>すると、適切なフォントを埋め込む(またはデバイスフォントを使用する)場合、タグはTextFormat.boldや正規表現を必要とせずに太字のテキストを提供する必要があります。

ただし、フォント処理と組み合わせたTextFieldsでのHTMLサポートに問題がある場合があり、実際の状況は太字のテキストの例よりも複雑である可能性があります。その場合、regexp/TextFormatコンボの代わりにStyleSheetフォーマットを使用することをお勧めします。発生したオフセットの不一致の問題に加えて、テキストフォーマットの2つの異なるアプローチ(HTMLとTextFormat)を組み合わせると、他の問題が発生するリスクがありますが、HTMLテキストとStyleSheetは一緒に使用することを目的としています。

StyleSheet / htmlTextの使用例を書き始めましたが、<b>とにかくスタイリングなしで動作するはずなので、少し変になってしまったので、スクラッチしました。ただし、サンプルコードが必要な場合はお知らせください。

于 2012-03-01T17:32:01.413 に答える