Хорошо, возможно, я слишком откусил здесь ...
Я знаю, что вы не должны анализировать xml / html для регулярных выражений, но дело в том, что других вариантов просто нет.
Я использую AS3
Я анализирую источник текста textflowlayout в другом формате.
строка для разбора:
< fontFamily=Verdana encoding=unicode fontWeight="bold"> some text < fontFamily=Verdana encoding=unicode > some text < fontFamily=Arial encoding=unicode fontStyle="italic"> some text < fontFamily=Arial encoding=unicode fontWeight="bold" fontStyle="italic"> some text
что мне действительно нужно:
< fontname=Verdanabold encoding=unicode> some text < fontname=Verdana encoding=unicode > some text < fontname=Arialitalic encoding=unicode > some text < fontname=Arialbolditalic encoding=unicode > some text
логически я думаю об этом, как о разбивке строки на подстроки
проверка наличия fontWeight или fontStyle в подстроке
если затем добавляется имя шрифта с весом или стилем, так что имя шрифта становится шрифтом NameWeightStyle.
затем восстановить строку.
Шрифт может быть любым шрифтом с различными стилями или весом.
Или, пожалуйста, оцените любые другие яркие способы сделать это.
пока:
pattern = /<(.*?)>/gixsm;
var matches:Object = pattern.exec(str);
var finalstring:String = "";
for each ( var i:String in matches ) {
if(i!='0'){
Alert.show(i);
pattern = /fontFamily=\"([^"]*)"/i;
if(pattern.test(i)==true){
pattern = /fontFamily=\"([^"]*)\" /i;
var resultfontFamily:Object = pattern.exec(i);
var fontFamily:String = resultfontFamily[1].toString();
/*pattern = /fontWeight=\".*?\" /i;
if(pattern.test(i)==true){
pattern = /fontWeight=\"([^"]*)\" /i;
var resultfontWeight:Object = pattern.exec(i);
var fontWeight:String = resultfontWeight[1].toString();
fontFamily = fontFamily+fontWeight;
}
pattern = /fontStyle=\"([^"]*)\" /i;
if(pattern.test(i)==true){
pattern = /fontStyle=\"([^"]*)\" /i;
var resultfontStyle:Object = pattern.exec(i);
var fontStyle:String = resultfontStyle[1].toString();
fontFamily = fontFamily+fontStyle;
}*/
fontFamily = "fontname="+fontFamily+" encoding=unicode";
pattern = /fontFamily=\".*?"/i;
finalstring += i.replace(pattern, fontFamily);
}
}
}
str = finalstring;
несколько вещей
1 - шаблон для создания совпадающего объекта
/<(.*?)>/gim; или / <([^ <]) +?> / gim;
похоже, не работает в as3 как точный сборщик строк для массива / объекта для этой строки ???
2 при условии, что мы должны собрать этот укус обратно - как бы я получил доступ к «некоторому тексту»?
любые предложения приветствуются -
очень признателен
M