RegEx只找到第一个值

时间:2013-07-30 05:18:47

标签: javascript regex function

所以我正在制作px转换器的em,当你在“px”textarea中粘贴css时,它会将每个px值转换为em。如果你输入类似“填充:10px;”的东西,它会起作用。然后转换,但如果你输入“填充:10px 0 40px 0;”它只将“10px”改为“10em”。我想让它转换所有这些,而不仅仅是停在第一个。有什么想法吗?

这是jsFiddle :: http://jsfiddle.net/CJamj/

        function pxToEm(){
        var px = document.getElementById("px"),
            em = document.getElementById("em"),
            parent = document.getElementById("parent-font-size");

        var pxVal = px.value.match(/\d+/g);
        var pxToEm = 1 / parent.value * pxVal;
        var pxToEmFixed = pxToEm.toFixed(3);
        var pxToEmAnswer = px.value.replace(pxVal, pxToEmFixed).replace("px", "em");

        em.value = pxToEmAnswer;
    }

1 个答案:

答案 0 :(得分:2)

Javascript replace()方法在第一个字符串中搜索指定的值,并返回一个新的字符串,其中替换了指定的值。 javascript中没有这样的方法replaceAll()。因此,要实现这一点,我们必须使用正则表达式在字符串中进行搜索。

最简单的方法是,使用正则表达式" g"标志来替换所有实例:

试试这个:

px.value.replace(pxVal, pxToEmFixed).replace(/px/g, "em")

将px转换为em:

function pxToEm(){
    var px = document.getElementById("px"),
    em = document.getElementById("em"),
    parent = document.getElementById("parent-font-size");

    var pxVal = px.value.match(/\d+px/g).toString().split(',');
    var lengthValue = pxVal.length;

    var pxToEmAnswer;
    for(var i = 0; i < lengthValue; i++)
    {
        var valueToBeReplced = pxVal[i].replace(/px/g, "");;
        var valueToBeReplcedExp = new RegExp(valueToBeReplced, "ig");
        pxToEmAnswer = px.value.replace(valueToBeReplcedExp,  (1/parseInt(parent.value) * valueToBeReplced).toFixed(3));
    }
    em.value = pxToEmAnswer.replace(/px/g, "em");
}

Fiddle