我一直在努力解决这个问题:
我有一个包含HTML的字符串,我正在使用正则表达式来获取标记之间的字符。然后我尝试将TextFormat应用于这些字符。
问题是我使用TextField的“htmlText”属性而不是它的“text”属性(因为我不希望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].length
由于HTML标记<b></b>
而长达7个字符。
我该怎么办?谢谢!
答案 0 :(得分:0)
tf.setTextFormat(format, match.index, match.index + match[1].length);
答案 1 :(得分:0)
使用TextField.htmlText,<b>
代码应该提供粗体文本,而不需要TextFormat.bold或regexp,前提是您嵌入了正确的字体(或使用设备字体)。
但是,我知道TextFields中的HTML支持有时会出现与字体处理相结合的问题,也许您的实际情况比带有粗体文本的示例更复杂。在这种情况下,我建议使用StyleSheet格式而不是regexp / TextFormat组合。除了你遇到的偏移不匹配的问题,我相信将两种不同的方法结合到文本格式 - HTML和TextFormat - 会带来出现其他问题的风险,而使用HTML文本和StyleSheet则需要一起使用。
我开始编写一个使用StyleSheet / htmlText的例子,但是因为<b>
无论如何都应该工作,没有样式,它有点奇怪,所以我抓了它。但是,如果您需要示例代码,请告诉我。