0

我已经为这个问题苦苦挣扎了一段时间:

我有一个包含 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>

我能做些什么呢?谢谢!

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 或 regexp,前提是您嵌入了正确的字体(或使用设备字体)。

但是,我知道 TextFields 中的 HTML 支持与字体处理相结合有时会出现问题,并且您的实际情况可能比带有粗体文本的示例更复杂。在这种情况下,我建议使用StyleSheet格式而不是 regexp/TextFormat 组合。除了您遇到的偏移不匹配问题之外,我相信将两种不同的文本格式化方法(HTML 和 TextFormat)结合起来可能会带来其他问题,而使用 HTML 文本和 StyleSheet 则意味着要一起使用。

我开始编写一个使用 StyleSheet/htmlText 的示例,但由于<b>无论如何都应该工作,没有样式,它有点奇怪,所以我抓了它。但是,如果您需要示例代码,请告诉我。

于 2012-03-01T17:32:01.413 回答