在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。
寻求你的帮助。
答案 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";
});
当你为replace的第二个参数提供一个函数时,它会被调用每个匹配,完整匹配作为第一个参数,然后是后续参数的任何捕获组的值;返回值用作替换值。所以上面我使用捕获组来捕获数字,然后进行数学运算并返回新的字符串。
您可能需要或想要调整正则表达式以确保它适合您的数据(数字和单位之间可能的空格,可能是i
标志,因此它匹配“PT”以及“pt” “等等,但这是基本方法。
答案 1 :(得分:0)
除T.J.克劳德解决方案: 由于pt值通常是非整数的(例如237.36pt),因此将regexp更改为匹配数字而非可选地使用小数点非常有用,否则此regexp匹配小数部分(即在我们的示例中为36pt)和回调将产生不正确的价值这个正则表达式应该解决这个问题:
/([0-9]*\.?[0-9]+)pt/g