我有一个这样的物体

myObj = {
    "strPattern": "Name: #name#<br>Surname: #sname#<br>Location: #loc#",
    "name": "John",
    "sname": "Doe",
    "loc": "LA"
}

现在,我需要一个函数,该函数将接收我的对象并借助其模式将其作为字符串返回。

预期结果: "Name: John<br>Surname: Doe<br>Location: LA"

我无法使用JavaScript的replace方法来做到这一点,而且我也不知道该怎么做。 谢谢您帮忙。

顺便说一下,subStr的数量可以是动态的。 例如,在此示例中,有3个subString,但对于其他对象,可以为5或10。 #年龄#,#性别#,等等...

===============>>#1 票数:2 已采纳

您可以使用for (var key in myObj)结构循环到对象属性。 在每个循环中, key变量保存每个属性的名称,您可以使用myObj[key]变量访问其值。

在您的方案中如何使用的示例可能是这样的。

var myObj = {
    "strPattern": "Name: #subStr1#<br>Surname: #subStr2#<br>Location: #subStr3#",
    "subStr1": "John",
    "subStr2": "Doe",
    "subStr3": "LA"
};

var html = myObj["strPattern"];

for (var key in myObj) {
   var obj = myObj[key];
    if(key !== "strPattern") {
        html = html.replace("#" + key + "#",obj);
    }
}

jQuery('#result').html(html);

我还用它做了一个jsfiddle

编辑 :正如@Andreas在评论中提到的那样,不能保证访问属性的顺序,我相应地调整了代码段。

===============>>#2 票数:2

以下功能可用于提高性能。 但是,如果您不需要多次使用模板,那就没用了。

function compile(tpl) {
    tpl = tpl.split(/#(.*?)#/);
    return Function('return [' + tpl.map(function (v, i) {
        if (i % 2) return 'this["' + v + '"]';
        return v && '"' + v.replace(/"/g, '\\"') + '"';
    }).join(',') + '].join("");');
}

用法示例:

var myObj = {
    "strPattern": "Name: #name#<br>Surname: #sname#<br>Location: #loc#",
    "name": "John",
    "sname": "Doe",
    "loc": "LA"
};

myObj.strPattern = compile(myObj.strPattern).call(myObj);

更有趣的 :

var tpl = '#first# #last#',
    compiled = compile(tpl);

compiled.call({ first: 'John', last: 'Doe' }); // "John Doe"
compiled.call({ first: 'Walter', last: 'White' }); // "Walter White"

此处有更多详细信息: https : //stackoverflow.com/a/20886377/1636522

===============>>#3 票数:0

只能通过出现在字符串中的替换来解决此问题的另一种方法是:

var Stringify = function(obj){
  return obj.strPattern.replace(/#([a-z]+)#/gi, function(match,group){
    return obj[group] || match;
  });
};

var str = Stringify({
  "strPattern": "Name: #name#<br>Surname: #sname#<br>Location: #loc#",
  "name": "John",
  "sname": "Doe",
  "loc": "LA"
});

那些想使用string.replace(pattern, function)也可能对此感兴趣。

所有浏览器何时开始支持String.replace(regexp,replace_function)?

===============>>#4 票数:0

myObj = {
    "strPattern": "Name: #subStr1#<br>Surname: #subStr2#<br>Location: #subStr3#",
    "subStr1": "John",
    "subStr2": "Doe",
    "subStr3": "LA"
}
function patternMatcher(myObj){
  strp = myObj.strPattern;
  pattern = strp.match(/#(.*?)#/g);

  for (key in pattern){
    origKey = pattern[key].substr(1,pattern[key].length-2);
    strp =  strp.replace(pattern[key],myObj[origKey])
  }
return strp;
}

console.log(patternMatcher(myObj)); 

这是您的代码运行示例链接

===============>>#5 票数:0

function getFilled(myObj){
  pattern = myObj.strPattern.match(/#(.*?)#/g);
  for (key in pattern){
    myObj.strPattern =  myObj.strPattern.replace(pattern[key],myObj[pattern[key].substr(1,pattern[key].length-2)])
  }
return myObj.strPattern;
}

console.log(getFilled(myObj)); 

  ask by user3253797 translate from so

未解决问题?本站智能推荐:

2回复

用于替换JavaScript模式的RegEx

我有大量的html文件,表达式如下: 我想消除eval表达式并只执行代码,换句话说,将其更改为: 任何人都可以帮助我。 我试图找到一个解决方案,但我只知道如何消除eval: 我正在使用java进行正则表达式。
2回复

Javascript:模式HREF需要替换

假设在我的HTML页面上,我有许多指向链接的href 。 使用Javascript,我需要遍历所有href并将其替换为某种东西,而href没有任何ID。 请帮忙。
2回复

根据Javascript中的模式替换单词

我正在将SVG转换为PNG,并且需要删除SVG中的angularjs属性。 我需要输出 我正在尝试使用javascript中的字符串替换方法进行替换。我已经在控制台中尝试了以下操作,但无法正常工作
2回复

Javascript模式替换提示?

更换的最佳方法是什么 通过javascript模态(最好是纯javascript,如果不可能,则使用jquery) 谢谢!
1回复

javascript:按模式查找并替换

我有一个字符串,看起来像: '[bla] asf bla qwr bla' ,其中bla未知。 我需要找到所有bla (或其他)事件。 我可以使用js在几个命令中做到这一点: 可以在一个正则表达式中做吗? bla未知,我只知道方括号。 括号中可以包含任何内容。
2回复

Javascript正则表达式替换多个模式

我正在尝试替换每个看起来都像这样的模式: 并用空格替换它。 我试过了: 显然不对...请帮忙吗?
1回复

如何使用javascript替换为可变模式

我有一个算术表达式,可以在美国数字字中包含一个数字(例如1000100可以写成一百万一千。我需要在表达式中识别出这种模式,并将其转换为相应的数字等效形式。 我正在使用下面的代码。 word2number是一个函数,它将直到(10 ^ 68)之前的任何数字的单词表示形式转换为其相应的
2回复

使用\\ d模式在javascript中替换()函数

我正在尝试在JAVASCRIPT中编写简单的函数,它可以使用我的chrome web浏览器上安装的Tampermonkey自定义我的html代码。 我的输入html是一个地址: 该地址保存在名为“address”的变量中。 我用了一些代码来定制它: 现在我的html输出如下所
3回复

javascript查找并替换字符串中的动态模式

我有一个动态模式,我一直在使用下面的代码来查找 我需要模式有一个新的要求,即包括一个额外的结尾5个字符y或n。 然后删除它或将其替换为''(什么都没有)。 我为模式尝试了这种语法,但是显然它不起作用。 任何提示,不胜感激 TIA。
3回复

在javascript中删除或替换模式中的子字符串

我需要在Javascript中使用regexp的帮助。 我正在寻找一种方法来替换子串~::~只有它在引号内。 这是我的情况: 源字符串: 所需的字符串: "aa\\"aa\\"aa"~::~ "bbbbbb" "ccc" ~::~ 示例代码: 问题是我的表达式不支