Javascript用正则表达式替换字符串中的变量

标签 javascript

我想用预定义的变量替换字符串中的很多关键字,示例如下, 但现在 $1 只显示变量名称,不显示变量内容,任何人都可以帮助我,拜托!!!

正确:

1111{t:aa}
2222{t:bb}
3333{t:cc}

致:

1111Test1
2222Test2
3333Test3

不是:

1111aa
2222bb
3333cc

代码:

var aa = "Test1";
var bb = "Test2";
var cc = "Test3";
var str_before = "1111{t:aa}\n2222{t:bb}\n3333{t:cc}";
var str_after = str_before.replace(/\{t:\s*(\w+)\}/g, "$1");
alert(str_before+"\n\n"+str_after);

最佳答案

正则表达式常量(即 /.../ 语法)不能直接引用变量。

另一种解决方案是使用 .replace 函数的回调参数:

var map = {
    aa: 'Test1',
    bb: 'Test2',
    cc: 'Test3'
};

var str_before = "1111{t:aa}\n2222{t:bb}\n3333{t:cc}";
var str_after = str_before.replace(/{t:(\w+)}/g, function(match, p1) {
    return map.hasOwnProperty(p1) ? map[p1] : '';
});

这还有一个优点,即从名称到值的映射现在可以轻松配置,无需为每个映射单独声明变量。

关于Javascript用正则表达式替换字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18985201/

相关文章:

javascript - 尽管缓存了 Favicon,但它们仍在获取

javascript - 重构 vue.js 中的方法

Javascript 原型(prototype)平庸 : inheritance

javascript - 循环内的 AJAX 请求 : aborting certain ajax call based on the response of the previous call?

JavaScript 覆盖对象方法但保持原始行为不变

javascript - 为什么我的 GSP 拉入我的 AngularJS javascript 文件但不执行我的 Controller 功能?

javascript - 隐藏枚举方法

javascript - SPARQL 查询从 SPARQL 查询验证器中获取错误,但在 Virtuoso SPARQL 查询编辑器中工作

javascript - 我的代码中是否存在无限循环?

javascript - 如何将 React Router 与 match.params 一起使用?