Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在替换我的javascript字符串中的%1和%2_Javascript - Fatal编程技术网

正在替换我的javascript字符串中的%1和%2

正在替换我的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,

假设我的javascript代码中有以下字符串:

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所做的一切),但它是一个很好的解决方案。谢谢大家,非常有启发性。演示