我有类似
的东西var string = "<h1>Hi {{name|there}}</h1>
<p>This is a message<br>
</p>
<p>Hello hello</p>"
我想查找所有{{...}}标记,并将其替换为第一个属性(|的左侧)和相应的值。如果该值不存在,我想用右侧的'fallback'替换标签(在这种情况下,字符串'there')
到目前为止,我已经尝试了类似下面的内容,但它没有得到群组
/{{(.+)|(.+)}}/
有什么想法吗?
答案 0 :(得分:1)
你可以这样做:
var string = "<h1>Hi {{name|there}}</h1> <p>This is a message<br></p><p>Hello hello</p>";
// If the variable exists
console.log(parse(string, {name: "Tony"}));
// If the variable is not set
console.log(parse(string, {potato: "Tony"}));
function parse(str, values){
str = str.replace(/\{\{(.*)\|(.*)\}\}/g,function(arg, match1, match2){
var data = match1.split("|");
var variable = match1;
var fallback = match2;
var replace = fallback;
if(typeof(values[variable]) != "undefined"){
replace = values[variable];
}
return replace;
});
return str;
}
&#13;
答案 1 :(得分:1)
如果您的输入看起来像{{name|there}}
(=&gt; name
),或{{|there}}
(=&gt; there
)或{{there}}
(=&gt; ; there
),您可以使用以下方法:
var string = `<h1>Hi {{name|there}}</h1>
<p>This is a {{|message}}<br>
</p>
<p>Hello {{hello}}</p>`;
var rx = /{{(.*?)(?:\|(.*?))?}}/g;
console.log(string.replace(rx, function(m,g1,g2) {
return g1 ? g1 : g2;
}));
&#13;
详细:
{{
- 文字{{
文字(.*?)
- 第1组捕获除了换行符号以外的任何0 +字符,直到第一个(?:\|(.*?))?
- 可选序列
\|
- 文字|
(.*?)
- 第2组捕获除了换行符号以外的任何0 +字符,直到第一个}}
- 文字}}
文字。在替换中,首先检查组1,如果它不为空,则返回其内容。否则,返回第2组内容。
答案 2 :(得分:1)
您可以执行以下操作;
var str = "<h1>Hi {{name|there}}</h1>",
val1 = "muçaços",
val2 = undefined,
str1 = str.replace(/\{\{(\w+)\|(\w+)\}\}/,(m,p1,p2) => val1||p2),
str2 = str.replace(/\{\{(\w+)\|(\w+)\}\}/,(m,p1,p2) => val2||p2);
console.log(str1);
console.log(str2);
&#13;
答案 3 :(得分:0)
你应该逃避所有这些角色:{} |
string.match(/\{\{(.+)\|(.+)\}\}/)