如果子串的一部分为真,则regex as3然后用运行的var替换部分子串

好吧也许我在这里咬得太多了...... 我知道你不应该将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。 然后重建字符串。 字体可以是具有variouse样式或权重的任何字体。 或者请任何其他明亮的方式来做到这一点将不胜感激。 至今:
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;或/&lt;([^&lt;])+?> / gim; 似乎没有在as3中作为字符串的准确收集器到该字符串的数组/对象??? 2假设我们必须将这种刺痛重新组合在一起 - 我将如何访问“某些文本”? 任何建议最受欢迎 - 非常感激 中号     
已邀请:
你的问题有点含糊不清 - 即你没有明确指出Style和Weight是否都出现在一个标签中。此外,您不指定空白和属性值引用要求。也就是说,以下(javascript语法)代码应该可以解决任何情况:
p1 = /(<s*fontnames*=s*)(['"]?)([^s'"]+)(['"]?)([^>]*?)s+fontWeights*=s*['"]?([^s'"]*)['"]?/ig;
p2 = /(<s*fontnames*=s*)(['"]?)([^s'"]+)(['"]?)([^>]*?)s+fontStyles*=s*['"]?([^s'"]*)['"]?/ig;
str = str.replace(p1, "$1$2$3$6$4$5");
str = str.replace(p2, "$1$2$3$6$4$5");
希望这有帮助! :)     

要回复问题请先登录注册