Actionscript - 使用正则表达式和TextFormat在HTML标记之间设置文本样式

时间:2012-03-01 16:18:46

标签: regex actionscript textfield htmltext textformat

我一直在努力解决这个问题:

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

我该怎么办?谢谢!

2 个答案:

答案 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>无论如何都应该工作,没有样式,它有点奇怪,所以我抓了它。但是,如果您需要示例代码,请告诉我。