javascript - RegExp "g"标志未替换每个实例

标签 javascript regex function replace

我正在研究 EM 到 PX 转换器。基本上,您将代码粘贴到“PX”文本区域中,然后相同的代码将出现在具有 em 值的“EM”文本区域中。它有点工作,但不会替换所有实例的值。例如:如果您输入“padding: 5px;”它会给你“填充:0.313em;”成功地。但是......如果你输入“填充:5px 4px;”它只是将“px”替换为“em”,而不是实际数值。

在这里亲自尝试一下::http://jsfiddle.net/tJsNz/

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

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

        em.value = pxToEmAnswer;
    }

最佳答案

考虑使用 .replacecallback function .我认为这就是您想要的 - 找到每个匹配项并根据它进行替换。

String 的 .replace 方法可以接受回调作为第二个参数,并在每次匹配时运行该回调。您可以运行它并匹配所有数字,然后用它们的翻译值替换它们。

举个简单的例子

var i=0;
"aaaaaa".replace(/a/g,function(match){
    return i++;
});

将返回 "012345"Here is another example from MDN

在你的情况下是这样的:

var pxToEmAnswer = px.value.replace(/\d+/ig, function(match){
    return 1 / parent.value * match;
}).replace(/px/ig, "em");

(fiddle)

关于javascript - RegExp "g"标志未替换每个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17956783/

相关文章:

javascript - 如何将了解更多链接直接指向选项卡?

javascript - 比较 Google Apps 脚本中的数组值

javascript - 点击函数 Jquery 计时

正则表达式排除特定字符不起作用

regex - 查找文件中每个出现的正则表达式

php - preg_replace 仅删除结束标签

javascript - 在匹配游戏javascript中添加分数

javascript - C 中 JavaScript 的等效 call() apply() 是什么?

javascript - p5.j​​s代码不会引发错误,但是在单击鼠标时不会加载

PHP 将数组传递给函数 - 如果未设置则保持默认值