在转换旧代码时,我遇到了以下问题。
给定一个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
什么是进行此类转换的最佳方法?
答案 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;
});
调用函数时,第一个参数是完全匹配,然后是捕获。它的返回值用于替换结果中的匹配。