正在替换我的javascript字符串中的%1和%2
假设我的javascript代码中有以下字符串:正在替换我的javascript字符串中的%1和%2,javascript,Javascript,假设我的javascript代码中有以下字符串: var myText = 'Hello %1. How are you %2?'; 现在我想在上面的字符串中插入一些东西来代替%1和%2。我可以做到: var result = myText.replace('%1', 'John').replace('%2', 'today'); 我想知道是否有比调用2次replace函数更好的方法 谢谢。来点formathelper怎么样?这基本上就是你需要的: function format(str,
var myText = 'Hello %1. How are you %2?';
现在我想在上面的字符串中插入一些东西来代替%1和%2。我可以做到:
var result = myText.replace('%1', 'John').replace('%2', 'today');
我想知道是否有比调用2次replace函数更好的方法
谢谢。来点
format
helper怎么样?这基本上就是你需要的:
function format(str, arr) {
return str.replace(/%(\d+)/g, function(_,m) {
return arr[--m];
});
}
var myText = 'Hello %1. How are you %2?';
var values = ['John','today'];
var result = format(myText, values);
console.log(result); //=> "Hello John. How are you today?"
演示:尝试此示例
function setCharAt(str,chr,rep) {
var index = -1;
index= str.indexOf(chr);
var len= chr.length;
if(index > str.length-1) return str;
return str.substr(0,index) + rep + str.substr(index+len);
}
var myText = 'Hello %1. How are you %2?';
var result = setCharAt(myText,"%1","John");
var result = setCharAt(result,"%2","today");
alert(result);
这是对elclarns伟大答案的复杂评论,提出了以下备选方案:
String.prototype
参数
String.prototype.format = function() {
var args=arguments;
return this.replace(/%(\d+)/g, function(_,m) {
return args[--m];
});
}
就这样叫
var result = "I am %1, %2 years old %1".format("Jan",32);
// I am Jan, 32 years old Jan
这里讨论这个问题:您的方法应该允许使用转义函数包含%1;例如%%1。。。允许像%{name}这样的散列函数在这里真正查看sprintf,以查看一个适当的实现,它将覆盖任何未来的排列添加一个fiddle!这看起来很棒:)又添了一把小提琴@艾哈迈德马苏德:我通常只使用稍微不同的正则表达式来执行
{1}
。它能满足我所有的需要。但是是的,有一些库可以提供更强大的解决方案。@AhmedMasud虽然这个库很棒,但OP并没有要求所有这些。这个答案并不完美(从这个意义上说,它没有你所描述的一切,也没有sprintf所做的一切),但它是一个很好的解决方案。谢谢大家,非常有启发性。演示