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

标签 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() {
    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 来匹配小数值,但它不起作用。

这是代码的实时版本:http://jsfiddle.net/trtcN/575/

最佳答案

您可以使用 [0-9.]+ 匹配整数值和小数值。您只需要这个正则表达式:

var searchPX = new RegExp('([0-9.]+)px', 'g');

代码中的另一个问题是您没有正确使用全局匹配。不要使用 if 执行一次正则表达式,您应该使用 while 重复测试它,直到匹配完为止。

演示:

var searchPX = new RegExp('([0-9.]+)px', 'g');

$('button').on('click', function() {
    var css = $('textarea').val(),
        newCss = css.slice();
    var result;
    while ((result = searchPX.exec(css)) !== null) {
        var px = result[1];
        var mm = px / 3.78;
        newCss = newCss.replace(px + 'px', mm + 'mm');
    }
    $('textarea').val(newCss);
});
textarea {
    width: 100%;
    height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<button>Convert PX to MM!</button>

<textarea>
#content {
    height: 50px;
    height: 50.14159px;
    height: 50.0px;
}
</textarea>

关于javascript - 使用整数或分数值将 px 转换为 mm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507585/

相关文章:

javascript - 使用 Ajax 请求突出显示图像边框

javascript - boolean 运算符如何工作 ||

javascript - Knockout textInput 和 maskedinput 插件

javascript - 警报后转到iframe中的图像链接

javascript - 使用链接 chop html 中的文本以显示更多/更少并将元素保留在内部

html - 将网页放在所有屏幕尺寸的中心

java - 更新其网站的应用程序

javascript - 由于时间间隔,AJAX 请求 get 被调用两次

javascript - 如何不使用for循环在对象数组中搜索ID?

javascript - jQueryUI 和 jQuery 插件冲突