В посте «ActionScript 3.0: выделение подстроки в текстовом поле» рассматривалось готовое решение для подсветки искомых слов в текстовом поле. Ммм... Но выяснилось, что работает это хорошо только с английским текстом. А вот с кириллицей возникают проблемы: для регулярных выражений не срабатывает флаг «игнорировать регистр». То есть, если мы хотим выделить слово «Псков», то регулярное выражение выделит только слово «Псков», но пропустит такие варианты, как «ПСКОВ» и «псков». Вот так вот... Впрочем, эту ситуацию можно исправить и своими кривыми ручками. Например, так...
Код ActionScript 3.0:
/*
текст, в котором будем искать и выделять подстроку или целые словосочетания
*/
var str:String = 'Псков, город, центр Псковской области РСФСР. Расположен на р. Великая (впадает в Псковское озеро) при слиянии её с р. Пскова. Узел ж.-д. линий (на Ленинград, Вильнюс, Бологое, Ригу) и шоссейных дорог. 146 тыс. жителей (1974; 43,2 тыс. в 1926; 60 тыс. в 1939; 81 тыс. в 1959). \nП. впервые упоминается под 903 ("Повесть временных лет", Лаврентьевская летопись). С 12 в. входил в состав Новгородской феодальной республики. С 1348 - центр самостоятельного княжества Псковской феодальной республики. В 13-16 вв. П. - крупный торгово-экономический и культурный центр. В П. получили распространение летописание (см. Псковские летописи), берестяные грамоты: псковская архитектура и живопись являются одной из основных школ древнерусского искусства (см. Псковская школа).П. - передовая крепость в борьбе русского народа против агрессии немецких рыцарей-феодалов (с середины 13 в. Ливонского ордена)и Великого княжества Литовского, успешно выдержавшая 26 осад. С 1510 П. - в составе Русского централизованного государства. В период Ливонской войны 1558-83 героическая Псковская оборона 1581-82 сорвала захватнические планы Батория. Обострение классовых противоречий в 17 в. проявилось в П. в двух крупных восстаниях: 1608-1611 и Псковском восстании 1650. К концу 17 в. П. начинает терять экономическое могущество, но в связи с Северной войной 1700-21 возрастает его оборонное значение. С 1777 - губернский город. Основание Петербурга ускорило экономический упадок П., а с присоединением Белоруссии к России в конце 18 в. он теряет значение и военной крепости. На протяжении 19 - начала 20 вв. П. - провинциальный город со слаборазвитой промышленностью (льняной, кожевенной, гончарной). \nС 26 февраля по 19 мая 1900 в П. под негласным надзором полиции жил В. И. Ленин (в апреле проводил Псковское совещание революционных марксистов и "легальных марксистов" по вопросу об их содействии изданию газеты "Искра"). Летом 1903 в П. оформилась социал-демократическая организация. В период 1-й мировой войны 1914-18 с конца 1915 в П. находился штаб Северного фронта и размещался 30-тысячный гарнизон. 2 (15) марта 1917 в П. царь Николай II отрекся от престола. 4 (17) марта в городе был создан Совет. Советская власть установлена 26 октября (8 ноября) 1917. С 26 февраля по 25 ноября 1918 П. был оккупирован германскими войсками. 9 июля 1941 в ходе Великой Отечественной войны 1941-45 был захвачен немецко-фашистскими оккупантами, разрушившими промышленные предприятия и культурно-исторические памятники. Освобожден Советской Армией 23 июля 1944. С 23 августа 1944 П. - областной центр. \nП. - значительный промышленный центр. Ведущая отрасль - машиностроение; заводы города выпускают электрооборудование, радиодетали, телефонную аппаратуру и аппаратуру дальней связи, машины для выработки искусственных и синтетических волокон и др. Развита также лёгкая (особенно льнообрабатывающая) и пищевая промышленность. производство стройматериалов. В П. - педагогический институт и филиал Ленинградского политехнического института; техникумы: индустриальный, строительный, кооперативный, совхоз-техникум, а также медицинское, музыкальное и культурно-просветительское училища. Два театра, историко-художественный и архитектурный музей-заповедник, Дом-музей и Квартира-музей В. И. Ленина. \nНа 1 января 1974 в П. было и больничных учреждений на 2,8 тыс. коек (19,1 койки на 1 тыс. жителей); работали 749 врачей (1 врач на 195 жителей). Детский общетерапевтический санаторий; в 75 км от П. - бальнеологический курорт Хилово. \nРеки Великая и Пскова делят город на 3 части: центр (основная часть П., расположенная на правом берегу р. Великой), Завеличье (левобережье р. Великой) и Запсковье (правобережье р. Псковы). С 13 в. строились каменные укрепления древнейшей части П. и его исторического центра - кремля (Крома; южная стена - Перши - перестраивалась в 1337, 1393-94, 1400-1425), расположенного на мысу при слиянии рр. Великой и Псковы (в Кроме - Троицкий собор, 1682-99). По мере роста П. возводились крепостные стены из местного камня-плитняка или деревянные (позднее обычно заменялись каменными), защищавшие новые районы города: Довмонтов город (1266), Средний город (каменная стена в 1309-75), Запсковье (каменная стена - 1465), Окольный город (каменная стена - 1465; в 16 в. стены длина 9 км укреплены и расширены, выстроены монументальные башни - Гремячая, 1524, и др.). Древнейшие постройки П., близкие к новгородской школе, - монументальные соборы монастырей: Мирожского (до 1156), Ивановского (до 1243), Снетогорского (1310; фрески - 1313). В 14-16 вв. из известняка строились характерные для псковской школы небольшие, с 2-, 3-, 5-пролётными звонницами приходские церкви (Василия с Горки, 1413; Косьмы и Дамиана с Примостья, 1463; Георгия со Взвоза, 1494; Успения с Пароменья, 1444, перестроена в 1521; Николы со Усохи, 1536), в 16-17 вв. - каменные жилые дома [3-этажные палаты Поганкиных (до 1645), дом Лапина ("Солодёжня"), дом Трубинского (1670-80-е гг.)]. По регулярному плану 1778 в П. строились по главным улицам каменные и деревянные 2-этажные дома по "образцовым" проектам в стиле классицизма. После Великой Отечественной войны 1941-45 П. застраивался по генеральному плану восстановления и дальнейшего развития (1945, архитекторы Н. В. Баранов, А. И. Наумов и др.). По новому генеральному плану (1971, архитекторы Г. П. Боренко, Н. В. Баранов и др.) П. застраивается жилыми и общественными зданиями с учётом расположения памятников архитектуры (массовое жилое строительство сосредоточено преимущественно в Запсковье и Завеличье). \nПамятники: В. И. Ленину на ул. Некрасова у Дома Советов (1945, скульптор М. Г. Манизер) и на площади Ленина у здания педагогического института (1960, скульптор Г. Е. Арапов, архитектор П. С. Бутенко, оба - бронза, гранит); монумент в честь первых побед Красной Армии под П. в 1918 (железобетон, 1969, архитектор И. Д. Билибин и др.; горельеф из кованой меди, скульптор Г. И. Мотовилов). (БСЭ)';
/*
искомая подстрока или словосочетание
*/
var substr:String = 'город псков';
/*
функция, которая будет выполнять поиск и выделение
*/
function func(str:String,substr:String,color:String='#ff0000'):String
{
var arr:Array = new Array();
arr = substr.split(" ");
var newarr:Array = new Array();
var l:uint = arr.length;
var i:uint = 0;
while (i < l)
{
newarr.push(arr[i].toLowerCase(),arr[i].toUpperCase(),arr[i].substr(0,1).toUpperCase()+arr[i].substr(1,arr[i].length-1));
i++;
}
l = newarr.length;
i = 0;
while (i < l)
{
var p:RegExp = new RegExp(newarr[i],'g');
str = str.replace(p,'<font color="' + color + '">' + newarr[i] + '</font>');
i++;
}
return str;
}
/*
текстовое поле
*/
var tf:TextField = new TextField();
tf.width = 450;
tf.height = 300;
tf.multiline = true;
tf.wordWrap = true;
tf.htmlText = func(str,substr);
addChild(tf);
tf.x = 50;
tf.y = 50;
Результат следующий:
Конечно, не идеальное решение, но оно покрывает большинство случаев. И при этом работает довольно шустро даже на довольно больших текстах.