2017-02-16 41 views
1

我想对字符串执行变量替换(我已经排除了模板字面量,因为字符串必须稍后进行存储和计算)。javascript - 替换为字符串模板,但是捕获缺失的变量

小胡子或类似的东西看起来像是一个竞争者,但我想知道替代是否不完整。在这种情况下,它的产生URL,因此,缺少零件的意思是无效的网址:

测试了这一点,在节点:

var Mustache = require('mustache'); 
var result = Mustache.render("/someurl/{{path1}}/{{path2}}/", {path1:"my-path-to-1"}) 
console.log(`result:${result}:`) 

这种情况没有问题,但由此产生的URL是无用的,因为胡子悄悄更换了缺少path2与一个空字符串。我想看到的是一个例外被抛出(最好)或失败,一个简单的方法来认识到并非一切都被取代。

注意:模板字符串是任意的,替换对象的内容也是任意的。

输出:

result:/someurl/my-path-to-1//: 

这是我找了Python相当于:

res = "/someurl/%(path1)s/%(path2)s/" % {"path1":"my-path-to-1"} 

输出:

KeyError: 'path2' 

回答

0

我结束了使用的sprintf,其中一个好处具有不同于Mustache(或Django)的格式,以便您可以将其嵌入data-url或类似内容中:

const sprintf = require("sprintf-js").sprintf; 

var o_substit = { 
    path1 : "mypath1" 
}; 

var T_URL = "/someurl/%(path1)s/%(path2)s/"; 


console.log(`\nT_URL:${T_URL}, substitutions:`); 
try { 
    console.dir(o_substit); 
    console.log("expecting a failure...") 
    var url = sprintf(T_URL, o_substit); 
    console.log(` url:${url}:`); 
} 
catch (e){ 
    console.log(` exception:${e}`); 
}; 

var o_substit = { 
    path1 : "mypath1" 
    ,path2 : "mypath2" 
}; 


console.log(`\nT_URL:${T_URL}, substitutions:`); 
try{ 
    console.dir(o_substit); 
    console.log("\nexpecting a success:") 
    var url = sprintf(T_URL, o_substit); 
    console.log(` url:${url}:`); 
} 
catch (e){ 
    console.log(` exception:${e}`); 
}; 

输出:

T_URL:/someurl/%(path1)s/%(path2)s/, substitutions: 
{ path1: 'mypath1' } 
expecting a failure... 
    exception:Error: [sprintf] property 'path2' does not exist 

T_URL:/someurl/%(path1)s/%(path2)s/, substitutions: 
{ path1: 'mypath1', path2: 'mypath2' } 

expecting a success: 
    url:/someurl/mypath1/mypath2/: