2011-08-29 70 views
2

这看起来很荒唐简单,但我很难想到一个干净的方式来做到这一点。替换一个字符串切片

考虑:

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

我想和任意长度的任意字符串来替换第二“富栏”实例(即,str.substring(8, 15))。

+0

当然,在这种情况下,这是作为串联一个新的字符串到结束微不足道。 – Blazemonger

回答

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); 
+0

对我来说那些“哦,呵呵”时刻之一 - 非常感谢。 (只要SO让我回答就会回答) – Aaron

+0

@Aaron:我们都有那些日子:) –

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); 
2

我通常喜欢用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(''); 
    }; 
} 

当然这是一个仅处理单个插入元素的简单示例。数组的拼接可以处理多个元素,但正因为如此,这些字符串无论如何都会被连接起来,因此提供了一个元素。

使用这种方法,你可以拨打:

a = "foo bar foo bar foo bar".splice(8, 7, 'newstring'); 
//a is now 'foo bar newstring foo bar' 
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"