javascript - 模板和占位符算法

标签 javascript algorithm templates placeholder

首先是一个快速定义:)

  • 模板 - 可能包含占位符的字符串(例如:“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/

相关文章:

javascript - JQuery - IF 语句只能工作两到三次

javascript - 按时间间隔运行 Javascript?

javascript - 脚本标签内的 HTML - 无法识别宽度和高度

c++ - 为什么模板参数推导在这里不起作用?

c++ - 使用模板时为 "error LNK2019: unresolved external symbol"

c++ - 显式函数模板特化选择了错误的特化

javascript - 将node.js HTTP响应函数(使用 "request"库)转换为使用流

algorithm - 生成所有排列的序列

algorithm - 返回 boolean 结果并在错误返回的情况下显示错误的函数

database - 字典数据库大小——哪些算法和策略让它如此轻便?