Actionscript — использование регулярного выражения и TextFormat для стилизации текста между тегами HTML.

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

Вопрос

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

У меня есть строка, содержащая HTML, и я использую регулярное выражение для получения символов между тегами.Затем я пытаюсь применить TextFormat к этим символам.

Проблема в том, что я использую свойство «htmlText» TextField вместо свойства «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>.

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

Это было полезно?

Решение

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

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

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

Другие советы

tf.setTextFormat(format, match.index, match.index + match[1].length); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top