带处理的Javascript条件正则表达式

时间:2010-08-30 12:42:57

标签: javascript regex

在转换旧代码时,我遇到了以下问题。

给定一个HTML字符串,

   <Font face="Arial" size="21" color="#000000"> 
     THIS IS SIZE 21    
    </Font>

我想使用正则表达式从输出字符串中的大小“21”中减去因子“X”?

所以新字符串是

   <Font face="Arial" size="(21-X)" color="#000000"> 
     THIS IS SIZE (21-X)    
    </Font>

示例

原始字符串

   <Font face="Arial" size="21" color="#000000"> 
     THIS IS SIZE 21    
    </Font>

和因子= 8(因此从尺寸中减去8 ..所以新尺寸= 21-8 = 13)

输出字符串

   <Font face="Arial" size="13" color="#000000"> 
     THIS IS SIZE 13   
    </Font>

可以使用Regex完成此类处理。 类似于C#中的match evaluator

什么是进行此类转换的最佳方法?

3 个答案:

答案 0 :(得分:2)

试试这个:

function update(elem, num) {
    var size = elem.getAttribute("size");
    if (size) {
        elem.setAttribute("size", (size - num) );
        elem.firstChild.nodeValue =
            elem.firstChild.nodeValue.replace(/(\d+)/, function(str, p1) {
               return p1 - num;
            });
    }
}
var fonts = document.getElementsByTagName('font');

update(fonts[0],8);

答案 1 :(得分:1)

在进一步说明之前,这些天的字体标记已经被CSS取代(并且在某些时候会被弃用),所以我会改用CSS。除此之外,Javascript RegExp Object上的此页面应该有所帮助。

答案 2 :(得分:1)

尝试以下内容:

var html = '<Font face="Arial" size="21" color="#000000">\n' +
           '  THIS IS SIZE 21 \n' +
           '</Font>';
var factor = 8;
html = html.replace(/(size=")(\d+)(")/g, function(m, c1, c2, c3) { 
    return c1+(c2-factor)+c3; 
});

调用函数时,第一个参数是完全匹配,然后是捕获。它的返回值用于替换结果中的匹配。