Javascript 如何在文本中替换为更多值?
我有一个(AngularJS)项目,我将替换文本中的一些标记。举例来说:Javascript 如何在文本中替换为更多值?,javascript,angularjs,replace,Javascript,Angularjs,Replace,我有一个(AngularJS)项目,我将替换文本中的一些标记。举例来说: {tag1} => one {tag2} => two {tag3} => three var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"}; text.replace(tags); 使用JavaScript替换函数,我可以替换一个值: text.replace('{tag1}', 'one'); 但是我有一个25个标签的列表。我
{tag1} => one
{tag2} => two
{tag3} => three
var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
text.replace(tags);
使用JavaScript替换函数,我可以替换一个值:
text.replace('{tag1}', 'one');
但是我有一个25个标签的列表。我想制作一个带有标记和替换的对象。举例来说:
{tag1} => one
{tag2} => two
{tag3} => three
var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
text.replace(tags);
如何执行此操作?您可以在tags对象上循环:
var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
for(var key in tags)
text.replace(new RegExp(key, 'g'), tags[key]);
可以使用“/g”regexp后缀替换所有出现的内容,直到文本结束,如下所示:
text.replace(new RegExp('{tag1}', "g"), 'one');
可以找到有关Javascript字符串替换的更多信息。您可以使用正则表达式
str.replace(/{[^{}]+}/g, m => tags[m] || m);
函数m=>tags[m]| | m
使用ES6语法。
ES5中的等效代码:
function(m) {
return tags[m] || m;
}
如果在对象中找到匹配的字符串(标记),则返回该标记的值。如果不是,则返回匹配的字符串本身
正则表达式解释:
{
:匹配{
文字[^{}]+
:匹配一个或多个字符,除了{
和}
}
:匹配}
文字g
:全局标志var str='Hello{tag1},我是{tag2}。{tag3}在哪里{tag1}{NoTag}';
变量标记={
“{tag1}”:“一个”,
“{tag2}”:“两个”,
“{tag3}”:“三”
};
str=str.replace(/{[^{}]+}/g,m=>tags[m]|m);
console.log(str);
document.body.innerHTML=str代码>你能用完整的字符串添加真实的例子吗。。。但这闻起来像是XSS攻击即将发生,所以要小心正确地避开任何输入,以确保它不会被用于注入恶意HTML或javascript。没错,但你不能在没有看到他的其余代码的情况下做出这些假设,这只是对他的问题的准确回答我不是在批评你的答案,我只是给OP一个警告:)这并不能回答问题,它只处理一个“标记”-OP希望传入一个包含多个标记的对象。它工作得非常出色!我还有一个问题。我有这个作用域:$scope.tags={{{tag1}:“一”,“两”}
如何向这个作用域添加项?我使用javascript推送函数时它不起作用。@JanvanRijswijk您不能在对象上使用push
。您可以使用$scope.tags['{tag3}']='Three'
在标记
对象中添加新项。