0

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

2 回答 2

2

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

另一种解决方案是使用.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] : '';
});

这进一步的好处是,您从名称到值的映射现在很容易配置,而无需为每个变量单独声明。

于 2013-09-24T15:09:24.933 回答
0

为此有一个 NPM 包,它允许您传入字符串和要替换它们的变量数组。找到一个简单的示例以及以下包的链接:

例子:

var str = "This is a {0} string for {1}"
var newStr = stringInject(str, ["test", "stringInject"]);

// This is a test string for stringInject 

NPM / GitHub 链接:

https://www.npmjs.com/package/stringinject

https://github.com/tjcafferkey/stringinject

于 2017-07-11T12:39:48.190 回答