Actionscript - Verwenden von regulären Ausdrücken und TextFormat zum Formatieren von Text zwischen HTML-Tags

StackOverflow https://stackoverflow.com/questions/9519857

Frage

Ich habe eine Weile mit diesem Problem zu kämpfen:

Ich habe eine Zeichenfolge, die HTML enthält, und ich verwende einen regulären Ausdruck, um die Zeichen zwischen den Tags zu erhalten.Ich versuche dann, ein TextFormat auf diese Zeichen anzuwenden.

Das Problem ist, dass ich die Eigenschaft "htmlText" des TextFelds anstelle der Eigenschaft "text" verwende (weil ich nicht möchte, dass die HTML-Tags sichtbar sind).Der vom regulären Ausdruck zurückgegebene Zeichenindex ist also falsch, wenn ich das TextFormat anwende.

Hier ist ein Beispielcode, der das Problem veranschaulicht:

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

Das gibt mir:

"Beispielzeichenfolge mit fettem Text"

anstelle des gewünschten:

"Probe zeichenfolge mit fettem Text"

da match[0].length sind aufgrund der HTML-Tags sieben Zeichen zu lang <b></b>.

Was kann ich dagegen tun?Danke!

War es hilfreich?

Lösung

Textfeld verwenden.htmlText, <b> tags sollten fetten Text enthalten, ohne dass ein TextFormat erforderlich ist.fett oder regulärer Ausdruck, vorausgesetzt, Sie betten die richtigen Schriftarten ein (oder verwenden Geräteschriftarten).

Aber ich weiß, dass es manchmal Probleme mit der HTML-Unterstützung in Textfeldern in Kombination mit der Schriftartbehandlung gibt, und vielleicht ist Ihre tatsächliche Situation komplexer als das Beispiel mit fettem Text.In diesem Fall würde ich empfehlen zu verwenden Stilvorlage formatierung anstelle der Kombination regexp / TextFormat.Abgesehen von dem Problem der Offset-Fehlanpassung, auf das Sie gestoßen sind, glaube ich, dass die Kombination der beiden verschiedenen Ansätze zur Textformatierung - HTML und TextFormat - das Risiko birgt, andere Probleme zu verursachen, während die Verwendung von HTML-Text und StyleSheet zusammen verwendet werden soll.

Ich habe angefangen, ein Beispiel für die Verwendung von StyleSheet / htmlText zu schreiben, aber seitdem <b> sollte sowieso funktionieren, ohne Styling wurde es etwas komisch, also habe ich es zerkratzt.Aber lassen Sie es mich wissen, wenn Sie Beispielcode benötigen.

Andere Tipps

tf.setTextFormat(format, match.index, match.index + match[1].length); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top