0

わかりました、おそらくここで噛みつきすぎました... xml/htmlを正規表現に解析することは想定されていませんが、他に多くのオプションがないことはわかっています。AS3 im を使用して、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

4

1 に答える 1

0

あなたの質問は少しあいまいです。つまり、Style と Weight の両方が単一のタグに表示されるかどうかを明確に指定していません。また、空白と属性値の引用要件も指定しません。とはいえ、次の (javascript 構文) コードは、ほぼすべてのケースでうまくいくはずです。

p1 = /(<\s*fontname\s*=\s*)(['"]?)([^\s'"]+)(['"]?)([^>]*?)\s+fontWeight\s*=\s*['"]?([^\s'"]*)['"]?/ig;
p2 = /(<\s*fontname\s*=\s*)(['"]?)([^\s'"]+)(['"]?)([^>]*?)\s+fontStyle\s*=\s*['"]?([^\s'"]*)['"]?/ig;
str = str.replace(p1, "$1$2$3$6$4$5");
str = str.replace(p2, "$1$2$3$6$4$5");

これが役立つことを願っています!:)

于 2011-03-09T20:05:52.657 に答える