Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在文本中替换为更多值?_Javascript_Angularjs_Replace - Fatal编程技术网

Javascript 如何在文本中替换为更多值?

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个标签的列表。我

我有一个(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);

如何执行此操作?

您可以在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'
    标记
    对象中添加新项。