我想用预定义的变量替换字符串中的很多关键字,示例如下, 但现在 $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/