Javascript 使用整数值或分数值将px转换为mm
我发现了通过使用正则表达式解析CSS中的值来转换这些值的代码。它对整数值的效果很好,但是当我尝试转换一个分数值,比如Javascript 使用整数值或分数值将px转换为mm,javascript,jquery,css,regex,Javascript,Jquery,Css,Regex,我发现了通过使用正则表达式解析CSS中的值来转换这些值的代码。它对整数值的效果很好,但是当我尝试转换一个分数值,比如10.15px时,它忽略了小数点右边的数字,并给出了类似于10.6.613756613756614mm的结果 这是我的密码: searchPX = new RegExp('(\\d+)px', 'g'); searchPXDec = new RegExp('(\d+\.\d+)px', 'g'); $('button').on('click', function() {
10.15px
时,它忽略了小数点右边的数字,并给出了类似于10.6.613756613756614mm
的结果
这是我的密码:
searchPX = new RegExp('(\\d+)px', 'g');
searchPXDec = new RegExp('(\d+\.\d+)px', 'g');
$('button').on('click', function() {
var css = $('textarea').val();
var css2 = $('textarea').val();
var result;
var result2;
if ((result = searchPX.exec(css)) !== null) {
var px = parseInt(result[1]);
var mm = px / 3.78;
css = css.replace(px + 'px', mm + 'mm');
$('textarea').val(css);
}
else if((result = searchPX.exec(css)) == null) {
result2 = searchPXDec.exec(css2);
if(result2 !== null) {
var pxdec = parseFloat(result2[1]);
var mmdec = pxdec / 3.78;
css2 = css2.replace(px + 'px', mm + 'mm');
$('textarea').val(css2);
}
}
});
我尝试匹配两个正则表达式,然后对整数值使用parseInt
,对分数数值使用parseFloat
,但它不起作用
这是代码的一个实时版本:您可以将整数值和分数值与
[0-9.]+
匹配。您只需要以下正则表达式:
var searchPX = new RegExp('([0-9.]+)px', 'g');
代码中的另一个问题是没有正确使用全局匹配。如果,则不应使用执行一次正则表达式,而应在
期间使用重复测试它,直到匹配项用尽为止
演示:
var searchPX=newregexp('([0-9.]+)px','g');
$('button')。在('click',function()上{
var css=$('textarea').val(),
newCss=css.slice();
var结果;
while((result=searchPX.exec(css))!==null){
var px=结果[1];
var-mm=px/3.78;
newCss=newCss.replace(px+'px',mm+'mm');
}
$('textarea').val(newCss);
});代码>
textarea{
宽度:100%;
高度:200px;
}
将PX转换为MM!
#内容{
高度:50px;
高度:50.14159px;
高度:50.0px;
}
那么,为什么不使用一个reg exp?或者取消检查…我只是尝试了这个searchPX=newregexp('(\\d+(\.\d+))px',g')代码>它给出了相同的结果。你确定3.78 px=1mm吗?我希望不同的设备有不同的值。我们正在将这些值传递给网站中的wkhtmltopdf呈现程序,该软件仍处于实验阶段,因此我目前不太关注跨设备dpi。也许以后再做我的研究吧。非常感谢!!这解决了我的问题。我会记下你指出的所有内容。我发现了一个微妙的错误:应该将提取的数字保留为字符串,而不是执行parseFloat
。这是因为我们不想将'50.0'
解析为50
,否则替换操作将不起作用。我已经相应地修改了这个片段。我也注意到了。在此之后,我又创建了两个类似的脚本,将em改为px,px改为pt,这三个脚本的值都有问题,比如'10.50'
,'10.500'
等等。谢谢