首先是一个快速定义:)
- 模板 - 可能包含占位符的字符串(例如:“hello [name]”)
- 占位符 - 带有方括号的子字符串(例如:“hello [name]:”中的“name”)。
- 属性映射 - 以字符串作为值的有效对象
我需要编写一段代码,用属性映射中的匹配值替换占位符(连同方括号)。
例子: 对于以下属性图:
{
"name":"world",
"my":"beautiful",
"a":"[b]",
"b":"c",
"c":"my"
}
预期结果:
"你好名字"-> "你好名字"
“你好[名字]”->“ Hello World ”
[b]"-> "c"
[a]"-> "c"(因为 [a]->[b]->[c])
[[b]]"-> "我的"(因为 [[b]]->[c]->我的)
“你好[我的][名字]”->“你好美丽的世界”
最佳答案
var map = {
"name":"world",
"my":"beautiful",
"a":"[b]",
"b":"c",
"c":"my"
};
var str = "hello [my] [name] [[b]]";
do {
var strBeforeReplace = str;
for (var k in map) {
if (!map.hasOwnProperty(k)) continue;
var needle = "[" + k + "]";
str = str.replace(needle, map[k]);
}
var strChanged = str !== strBeforeReplace;
} while (strChanged);
document.write(str); //hello beautiful world my
关于javascript - 模板和占位符算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979312/