用相同的命名变量替换字符串

时间:2013-07-01 10:29:24

标签: javascript regex replace str-replace templating

我几天前写道,如果无法加载所需的图像,则可以回退到占位符图像。它允许用户使用2 占位符来定义图像大小:

那是thing I wrote

;(window.jQuery || window.Zepto).fn.fallback = function (url) {
    return this.one('error', function () {
        this.src = (url|| 'http://lorempixel.com/$w/$h')
        .replace('$w', this.width).replace('$h', this.height);
    });
};

我现在问我,是否可以用更短但相等的.replace('$w', this.width).replace('$h', this.height);替换regex来用指定的值替换所有$*(美元+第一个字符)从任何对象?

这样的事情:

'$f is not equal to $b'.replace(/magicregex/, {
    foo: 'foo',
    bar: 'bar'
});

这样我们就可以使用properties中的所有image-object,例如image.widthimage.srcimage.width ...

1 个答案:

答案 0 :(得分:1)

仅当您使用某个功能作为替换时。像:

"$w/$h".replace(/\$[wh]/g, function(m){ return m == "$w" ? width : height; });

您也可以像这样取消比较:

"$w/$h".replace(/\$(?:(w)|h)/g, function(m, w){ return w ? width : height; });

如果要在散列中查找值,可以使用:

"$w/$h".replace(/\$(\w+)/g, function(m, name){ return hash[name]; });