Javascript 使用整数值或分数值将px转换为mm

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() {

我发现了通过使用正则表达式解析CSS中的值来转换这些值的代码。它对整数值的效果很好,但是当我尝试转换一个分数值,比如
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'
等等。谢谢