javascript-替换为字符串模板,但捕获缺少的变量
我想对字符串执行变量替换(我已经排除了模板文本,因为字符串必须在以后存储和计算) 胡子之类的东西看起来像是一个竞争者,但我想知道替换是否不完整。在这种情况下,需要生成URL,因此缺少的部分表示无效URL: 在节点中对此进行测试:javascript-替换为字符串模板,但捕获缺少的变量,javascript,ecmascript-6,mustache,Javascript,Ecmascript 6,Mustache,我想对字符串执行变量替换(我已经排除了模板文本,因为字符串必须在以后存储和计算) 胡子之类的东西看起来像是一个竞争者,但我想知道替换是否不完整。在这种情况下,需要生成URL,因此缺少的部分表示无效URL: 在节点中对此进行测试: var Mustache = require('mustache'); var result = Mustache.render("/someurl/{{path1}}/{{path2}}/", {path1:"my-path-to-1"}) console.log(
var Mustache = require('mustache');
var result = Mustache.render("/someurl/{{path1}}/{{path2}}/", {path1:"my-path-to-1"})
console.log(`result:${result}:`)
这种情况发生时没有问题,但结果url是无用的,因为Mustach会用空字符串悄悄地替换缺少的路径2。我希望看到的是抛出一个异常(最好)或失败,这是一个简单的方法来识别并不是所有的东西都被替换了
注意:模板字符串是任意的,替换对象的内容也是任意的
输出:
result:/someurl/my-path-to-1//:
KeyError: 'path2'
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/:
这是我正在寻找的Python等价物:
res = "/someurl/%(path1)s/%(path2)s/" % {"path1":"my-path-to-1"}
输出:
result:/someurl/my-path-to-1//:
KeyError: 'path2'
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/:
我最终使用了sprintf,它的优点是具有与Mustach(或Django)不同的格式,因此您可以将其嵌入
数据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}`);
};
输出:
result:/someurl/my-path-to-1//:
KeyError: 'path2'
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/:
我最终使用了sprintf,它的优点是具有与Mustach(或Django)不同的格式,因此您可以将其嵌入
数据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}`);
};
输出:
result:/someurl/my-path-to-1//:
KeyError: 'path2'
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/: