我有一个字符串,但在字符串中的某些点它有动态值。 我想在字符串中找到这些点,并用数组中的值替换它们。
我们说我有:
#Working:
my $var= "Hello, this is test output";
printf ("%20s\n", $var);
#output:
#Hello, this is test output
#not working:
my $yaxis= "20";
printf ("%${yaxis}s\n", $var);
#Output:
# Hello
现在我需要找出一种方法来替换{1},使用数组中第一个索引的值,并将{2}替换为数组的第二个索引的值。
所以字符串会这样:
var array = ['string', 'value'];
var string = 'This is a {1}, and this is a {2}.';
这看起来很简单,但我对此深感不安。我无法轻易找到一种方法。
答案 0 :(得分:5)
您可以将replace
与正则表达式和函数一起使用:
string.replace(/{(\d+)}/g, function(match, n) {
return array[n-1];
});
您还可以检查n < 1 || n > array.length
,以便在数量超出范围时提供回退值。
或者,新的ES6方式正在使用tagged template strings
function tag(strings, ...values) {
var parts = [];
for(var i=0; i<strings.length; ++i)
parts.push(strings[i], array[values[i]-1]);
return parts.join('');
}
tag`This is a ${1}, and this is a ${2}.`
答案 1 :(得分:1)
您可以使用Array.prototype.reduce
:
var StringHelper = {
format: function(format, args) {
return args.reduce(function(result, currentReplace, currentReplaceIndex) {
result = result.replace("{" + (currentReplaceIndex + 1) + "}", args[currentReplaceIndex]);
return result;
}, format);
}
};
var sourceString = "My name is {1} and I'm {2} years old";
var replaceItems = ["Matías", "31"];
var parsedString = StringHelper.format(sourceString, replaceItems);
alert(parsedString);
&#13;
它是正则表达式的一个很好的替代品,我不能确定我是否以正确的方式做了jsPerf test,但它表明这种方法优于正则表达式。< / p>
答案 2 :(得分:1)
string.replace(/\{(\d+)\}/g, function(m, n){
return array[n-1]
})