0

好吧,也许我在这里咬得太多了……我知道你不应该将 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

4

1 回答 1

0

您的问题有点模棱两可 - 即您没有明确指定样式和重量是否都可能出现在单个标签中。此外,您没有指定空格和属性值引用要求。也就是说,以下(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 回答