Actionscript - использование регулярного выражения и TextFormat для стилизации текста между тегами HTML - PullRequest
0 голосов
/ 01 марта 2012

Я некоторое время боролся с этой проблемой:

У меня есть строка, содержащая 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>.

Что я могу с этим сделать?Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Используя TextField.htmlText, теги <b> должны давать жирный текст, без необходимости использования TextFormat.bold или regexp, при условии, что вы встраиваете нужные шрифты (или используете шрифты устройства).

Но я знаю, что иногда возникают проблемы с поддержкой HTML в TextFields в сочетании с обработкой шрифтов, и, возможно, ваша реальная ситуация сложнее, чем пример с жирным текстом. В этом случае я бы рекомендовал использовать форматирование StyleSheet вместо комбо regexp / TextFormat. Помимо проблемы со смещением смещения, с которой вы столкнулись, я считаю, что объединение двух разных подходов к форматированию текста - HTML и TextFormat - создает риск возникновения других проблем, в то время как использование текста HTML и StyleSheet предназначено для совместного использования.

Я начал писать пример использования StyleSheet / htmlText, но так как <b> должен работать в любом случае, без стилизации, это стало немного странным, поэтому я поцарапал его. Но дайте мне знать, если вам нужен пример кода.

0 голосов
/ 01 марта 2012
tf.setTextFormat(format, match.index, match.index + match[1].length); 
...