使用正则表达式将“pt”转换为“px”

时间:2010-12-21 06:52:25

标签: javascript regex

在WYSIWYG编辑器中,我有

<TABLE style="WIDTH: 162pt; BORDER-COLLAPSE: collapse" border=0 cellSpacing=0 cellPadding=0 width=216>

我可以将其转换为

<TABLE style="WIDTH: 162px; BORDER-COLLAPSE: collapse" border=0 cellSpacing=0 cellPadding=0 width=216>

使用

"wysiwygdata".replace(/pt/g ,"px");

有没有办法使用正则表达式将pt的关联值更改为px的值。

162pt可能是162 * 96 / 72px。

寻求你的帮助。

2 个答案:

答案 0 :(得分:17)

您可以使用正则表达式,将函数提供给String#replace

s = /* ...the data... */;
s = s.replace(/([0-9]+)pt/g, function(match, group0) {

    return Math.round(parseInt(group0, 10) * 96 / 72) + "px";
});

Live example

当你为replace的第二个参数提供一个函数时,它会被调用每个匹配,完整匹配作为第一个参数,然后是后续参数的任何捕获组的值;返回值用作替换值。所以上面我使用捕获组来捕获数字,然后进行数学运算并返回新的字符串。

您可能需要或想要调整正则表达式以确保它适合您的数据(数字和单位之间可能的空格,可能是i标志,因此它匹配“PT”以及“pt” “等等,但这是基本方法。

答案 1 :(得分:0)

除T.J.克劳德解决方案: 由于pt值通常是非整数的(例如237.36pt),因此将regexp更改为匹配数字而非可选地使用小数点非常有用,否则此regexp匹配小数部分(即在我们的示例中为36pt)和回调将产生不正确的价值这个正则表达式应该解决这个问题:

/([0-9]*\.?[0-9]+)pt/g