替换字符串切片

时间:2011-08-29 17:28:54

标签: javascript string

这看起来非常简单,但我很难想出一个干净利落的方法。

考虑:

var str = "foo bar foo bar foo bar";

我想用任意长度的任意字符串替换第二个“foo bar”实例(即str.substring(8, 15))。

4 个答案:

答案 0 :(得分:6)

为什么不使用

var str = "foo bar foo bar foo bar";
str = str.substring(0, 8) + "my new string" + str.substring(15)

您甚至可以概括为:

   var token = "foo bar";
   var newStr = "my new string";

   var str = "foo bar foo bar foo bar";
   str = str.substring(0, token.length+1) + 
           newStr + 
           str.substring(token.length*2+1);

答案 1 :(得分:3)

我通常更喜欢使用Array.splice method来做这类事情:

var str = "foo bar foo bar foo bar".split('');
str.splice(8, 7, 'newstring');
str = str.join('');
//"foo bar newstring foo bar"

如果您想要重复使用它,请将其添加到字符串中:

if (!String.prototype.splice)
{
  String.prototype.splice = function(index, howmany, element){
    var arr = this.split('');
    arr.splice(index, howmany, element);
    return arr.join('');
  };
}

当然,这是一个只处理单个插入元素的简单示例。 Splice for arrays处理多个,但是这样的字符串只会被连接起来,所以提供了一个元素。

使用此方法可以调用:

a = "foo bar foo bar foo bar".splice( 8, 7, 'newstring' );
//a is now 'foo bar newstring foo bar'

答案 2 :(得分:1)

您可以使用正则表达式:

"foo bar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // foo bar testtest foo bar
"notfoo notbar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // notfoo notbar foo bar testtest

var token = "foo bar";
var newStr = "new string";
var rg = new RegExp(token + ' (' + token + ')');
"foo bar foo bar foo bar".replace(rg, '$1 ' + newStr);

答案 3 :(得分:0)

我为它写了一个原型方法:

String.prototype.sliceReplace = function(start, end, repl) {
    return this.substring(0, start) + repl + this.substring(end);
};

var s = "12345678";
s.sliceReplace(2,4, "-----"); // "12-----5678"